当前位置: 首页 > news >正文

机器学习笔记二-回归

回归是统计学和机器学习中的一种基本方法,用于建模变量之间的关系,特别是用一个或多个自变量(输入变量)来预测一个因变量(输出变量)的值。回归分析广泛应用于预测、趋势分析和关联研究中。根据目标和数据的性质,可以使用不同类型的回归方法。

1. 回归的基本概念

  • 自变量(Independent Variable): 也称为预测变量、解释变量,是模型中的输入变量,用于预测或解释因变量的变化。
  • 因变量(Dependent Variable): 也称为响应变量,是模型中的输出变量,是自变量的函数,并且我们试图对其进行预测或解释。
  • 回归系数(Regression Coefficients): 表示自变量对因变量的影响程度。在简单线性回归中,回归系数就是斜率。

2. 常见的回归类型

2.1 线性回归(Linear Regression):
  • 简单线性回归: 只有一个自变量和一个因变量,回归方程为 y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1 x + \epsilon y=β0+β1x+ϵ,其中 β 0 \beta_0 β0 是截距, β 1 \beta_1 β1 是斜率, ϵ \epsilon ϵ 是误差项。

    from sklearn.linear_model import LinearRegressionmodel = LinearRegression()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    
  • 多元线性回归: 包含多个自变量,回归方程为 y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n + ϵ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n + \epsilon y=β0+β1x1+β2x2++βnxn+ϵ

    model = LinearRegression()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    
  • 优点:

    • 简单易解释。
    • 在自变量和因变量呈线性关系时效果较好。
  • 缺点:

    • 假设自变量和因变量之间是线性关系,可能不适合复杂数据。
    • 对多重共线性敏感。
2.2 岭回归(Ridge Regression):
  • 在线性回归的基础上引入了 ( L2 ) 正则化项,防止模型过拟合。回归方程为 y = β 0 + ∑ i = 1 n β i x i + λ ∑ i = 1 n β i 2 y = \beta_0 + \sum_{i=1}^{n}\beta_i x_i + \lambda \sum_{i=1}^{n}\beta_i^2 y=β0+i=1nβixi+λi=1nβi2

    from sklearn.linear_model import Ridgeridge = Ridge(alpha=1.0)
    ridge.fit(X_train, y_train)
    y_pred = ridge.predict(X_test)
    
  • 优点:

    • 减少过拟合,提高模型的泛化能力。
  • 缺点:

    • 仍然假设线性关系。
2.3 Lasso回归(Lasso Regression):
  • 引入 ( L1 ) 正则化项,会导致部分回归系数缩小到零,从而实现特征选择。回归方程为 y = β 0 + ∑ i = 1 n β i x i + λ ∑ i = 1 n ∣ β i ∣ y = \beta_0 + \sum_{i=1}^{n}\beta_i x_i + \lambda \sum_{i=1}^{n}|\beta_i| y=β0+i=1nβixi+λi=1nβi

    from sklearn.linear_model import Lassolasso = Lasso(alpha=0.1)
    lasso.fit(X_train, y_train)
    y_pred = lasso.predict(X_test)
    
  • 优点:

    • 自动进行特征选择,简化模型。
  • 缺点:

    • 可能导致特征过多时过度简化。
2.4 弹性网回归(Elastic Net Regression):
  • 结合了 Ridge 和 Lasso 的优点,同时引入 ( L1 ) 和 ( L2 ) 正则化项。回归方程为 y = β 0 + ∑ i = 1 n β i x i + λ 1 ∑ i = 1 n ∣ β i ∣ + λ 2 ∑ i = 1 n β i 2 y = \beta_0 + \sum_{i=1}^{n}\beta_i x_i + \lambda_1 \sum_{i=1}^{n}|\beta_i| + \lambda_2 \sum_{i=1}^{n}\beta_i^2 y=β0+i=1nβixi+λ1i=1nβi+λ2i=1nβi2

    from sklearn.linear_model import ElasticNetelastic = ElasticNet(alpha=1.0, l1_ratio=0.5)
    elastic.fit(X_train, y_train)
    y_pred = elastic.predict(X_test)
    
  • 优点:

    • 结合了 Ridge 和 Lasso 的特性,平衡了特征选择和防止过拟合。
  • 缺点:

    • 需要调参。
2.5 多项式回归(Polynomial Regression):
  • 适用于非线性数据,通过引入多项式特征,使模型可以拟合更复杂的曲线。回归方程为 y = β 0 + β 1 x + β 2 x 2 + ⋯ + β n x n y = \beta_0 + \beta_1 x + \beta_2 x^2 + \cdots + \beta_n x^n y=β0+β1x+β2x2++βnxn

    from sklearn.preprocessing import PolynomialFeaturespoly = PolynomialFeatures(degree=2)
    X_poly = poly.fit_transform(X)
    model = LinearRegression()
    model.fit(X_poly, y)
    y_pred = model.predict(poly.transform(X_test))
    
  • 优点:

    • 可以拟合更复杂的关系。
  • 缺点:

    • 容易过拟合,需要仔细选择多项式的阶数。
2.6 逻辑回归(Logistic Regression):
  • 尽管名为回归,但逻辑回归是用于二分类问题的。它使用 sigmoid 函数将线性回归的输出映射到 0 和 1 之间,表示某类的概率。

    from sklearn.linear_model import LogisticRegressionmodel = LogisticRegression()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    
  • 优点:

    • 简单且有效。
    • 可以解释模型输出为概率值。
  • 缺点:

    • 只能处理二分类问题,且假设自变量与因变量的关系是线性可分的。
2.7 决策树回归(Decision Tree Regression):
  • 基于决策树的模型,通过递归划分特征空间,将复杂的决策问题分解为一系列简单的决策。适用于处理非线性关系。

    from sklearn.tree import DecisionTreeRegressormodel = DecisionTreeRegressor()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    
  • 优点:

    • 不需要特征缩放。
    • 能处理非线性数据。
  • 缺点:

    • 容易过拟合,需要剪枝或限制树的深度。
2.8 随机森林回归(Random Forest Regression):
  • 集成多个决策树的结果,减少过拟合,提升模型的泛化能力。

    from sklearn.ensemble import RandomForestRegressormodel = RandomForestRegressor(n_estimators=100)
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    
  • 优点:

    • 强大的泛化能力。
    • 处理高维数据和缺失值的能力强。
  • 缺点:

    • 相对黑箱,不易解释。

3. 回归模型的评价指标

  • 均方误差(MSE): MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2,用来衡量模型预测值与实际值之间的误差。
  • 均方根误差(RMSE): RMSE = MSE \text{RMSE} = \sqrt{\text{MSE}} RMSE=MSE ,它是 MSE 的平方根,更直观地反映误差的大小。
  • 平均绝对误差(MAE): MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i| MAE=n1i=1nyiy^i,它比 MSE 对异常值不敏感。
  • R 2 R^2 R2 决定系数: 表示模型解释数据方差的比例, R 2 R^2 R2 越接近 1,模型的拟合效果越好。
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_scoremse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

4. 回归模型的应用

  • boston房价预测

相关文章:

机器学习笔记二-回归

回归是统计学和机器学习中的一种基本方法,用于建模变量之间的关系,特别是用一个或多个自变量(输入变量)来预测一个因变量(输出变量)的值。回归分析广泛应用于预测、趋势分析和关联研究中。根据目标和数据的…...

判断http链接中文件是否存在

最近项目遇到需要从http请求下载文件到服务器,下载前需要判断下http中的文件是否存在。如果判断本地服务器上文件是否存在,用file.exists来判断。但是这个方法却无法判断http中文件是否存在。 如果要判断http文件是否存在,用如下代码&#xf…...

Flink CDC (session模式)

1、 # Start YARN session ./bin/yarn-session.sh --detached 2、配置文件: rest.bind-port: {{REST_PORT}} rest.address: {{NODE_IP}} execution.target: yarn-session yarn.application.id: {{YARN_APPLICATION_ID}} 3、mysql-doris.yml source:type: mysql…...

下载ISO镜像的方法 Debian、Red Hat 、CentOS、Ubuntu、Kali Linux

目录 Debian Red Hat CentOS Ubuntu Kali Linux Debian 下载步骤: 访问Debian的官方网站:Debian官网。在网站上找到“Downloads”或类似的下载链接。选择适合你的计算机架构(如amd64、i386等)的Debian版本。点击下载ISO镜像…...

想学接口测试,不知道那个工具适合?

接口测试是软件测试中的一项重要任务,它主要关注系统的不同组件之间的数据交换和通信。接口测试是一种黑盒测试方法,它可以帮助我们验证系统的功能和性能是否达到预期,并且确保不同组件之间的消息传递是正确的。在接口测试过程中,…...

干货分享 | TSMaster—RP1210模块使用指南

RP1210是由技术和维护委员会(TMC)编写的一种建议性实践。RP1210用于对重型车辆射频相关的(主要针对)电子控制单元(ECU)进行二次编程和分析。本文主要针对TSMaster—RP1210模块的操作进行详细介绍。 本文关…...

一步解决Ubuntu中无法使用git clone的问题

在网上找了很多教程都无法解决,最后用了一行命令成功解决 git config --global url."https://github.com".insteadOf git://github.com输入这行命令,之后就可以使用git clone了...

c++的时间复杂度

前言 Hello,大家好我是文宇. 最近没怎么写文章了,写个教程吧. 正文 C是一种高级编程语言,用于开发各种类型的应用程序,包括计算机科学中的算法和数据结构。在编写代码时,了解算法和数据结构的时间复杂度非常重要,因为它可以帮…...

PDF转图片 JAVA

前言 以下是一个使用 Apache PDFBox 将 PDF 文件转换为图片的封装方法。这个方法将会把 PDF 的每一页转换为一张图片,并保存到指定的目录中。 1.添加依赖 首先,你需要在项目中添加 PDFBox 的依赖。如果你使用的是 Maven,可以在 pom.xml 中添…...

树莓派5 笔记26:ollama大型语言模型_中文输入法_Python_espeak文字转语音

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 下载大语言模型,下载中文输入法&#…...

【kubernetes】k8s安全机制

Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介, 也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 API Server 来设计的。 比如 kubectl 如果想向 API Server…...

Android T(13) The app is granted permissions by default

我的博客 对比Android11,frameworks\base\services\core\java\com\android\server\pm\permission文件夹下,多了个PermissionManagerServiceImpl.java. 有一部分关于权限的处理,移到了这个文件中.比如:restorePermissionState(…) all app granted permissions by default b/fr…...

4 - Linux远程访问及控制

目录 一、SSH远程管理 1. SSH概述 2.SSH的优点 3.配置OpenSSH客户端 4.sshd服务支持的两种验证方式 5. 使用SSH客户端程序 5.1 ssh - 远程登录 5.2 scp - 远程复制 6.配置密钥对验证 二、TCP Wrappers访问控制 1.TCP Wrappers 概述 2. TCP Wrappers 机制的基本原则 …...

如何使用AWS EC2资源?

随着云计算技术的迅速发展,越来越多的企业和个人选择将工作负载迁移到云端,以获取灵活性、可扩展性和成本效益。作为全球领先的云计算服务提供商,AWS为用户提供了丰富的服务,其中最受欢迎的之一是云服务器EC2。本文中九河云将探讨…...

Linux高编-进程的概念(1)

目录 1.ps aux 2.top 3.kill -2 进程pid // fork函数 getpid拿自己的进程号 getppid拿父进程号 fork()&&fork()||fork() 父子进程的关系: 僵尸进程,孤儿进程 僵…...

go语言中new和make的区别

在 Go 语言中,new 函数不能用来创建通道(chan),这是因为 new 只分配内存并返回指向该内存的指针,而不负责初始化内存。 为什么不能使用 new 来创建通道? new 只能分配内存,但不会对内存进行初…...

SpringBoot响应式编程(3)R2DBC

一、概述 1.1简介 R2DBC基于Reactive Streams反应流规范,它是一个开放的规范,为驱动程序供应商和使用方提供接口(r2dbc-spi),与JDBC的阻塞特性不同,它提供了完全反应式的非阻塞API与关系型数据库交互。 …...

什么是私有继承

私有,公有,针对类而言; 私有( private )的成员,自己的,只能在自己内部( 类的定义体内部 )访问,外部( 类的定义体外部 )不能访问/调用; 公有( 或者说公开,public )的成员&#xff0…...

Scratch编程:开启智能硬件控制的大门

标题:“Scratch编程:开启智能硬件控制的大门” 在当今数字化时代,编程不仅仅是与计算机的交互,更是与物理世界的连接。Scratch,这款由麻省理工学院媒体实验室开发的视觉化编程语言,以其易学易用的特性&…...

机器学习第十二章-计算学习理论

目录 12.1基础知识 12.2 PAC学习 12.3有限假设空间 12.3.1可分情形 12.3.2不可分情形 12.4VC维 12.5 Rademacher复杂度 12.1基础知识 计算学习理论研究的是关于通过"计算"来进行"学习"的理论,即关于机器学习的理论基础,其目的…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

数据库分批入库

今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...