004-基于Sklearn的机器学习入门:回归分析(下)

本节及后续章节将介绍机器学习中的几种经典回归算法,包括线性回归,多项式回归,以及正则项的岭回归等,所选方法都在Sklearn库中聚类模块有具体实现。本节为下篇,将介绍多项式回归和岭回归等。

目录

2.3 多项式回归

2.3.1 概述

2.3.2 数学模型

2.3.3 Sklearn实现

2.4 带正则项的回归分析

2.4.1 正则项

2.4.2 岭回归

2.4.3 Laoss回归

2.5 综合实例

2.3 多项式回归

在一般的线性回归中,使用的假设函数是一元一次方程,也就是二维平面上的一条直线。但是很多时候可能会遇到直线方程无法很好的拟合数据的情况,这个时候可以尝试使用多项式回归(Polynomial Regression)。

2.3.1 概述

多项式回归是一种扩展了线性回归模型的统计方法,用于拟合数据之间的非线性关系。具体来说,多项式回归通过在传统的线性回归模型中增加变量的高次项(如平方项、立方项等),使得模型能够更好地适应数据中的曲线趋势。这种方法的核心思想是,任何光滑的曲线都可以通过适当高阶的多项式来逼近

以下是多项式回归的一些关键点:

  • 基本原理:多项式回归的基本思想是在线性回归的基础上,将自变量的幂次作为新的特征加入模型中,从而使模型能够捕捉到数据的非线性结构。
  • 模型表达:见下面。
  • 模型评估:在选择多项式的阶数时,需要权衡模型的复杂度和拟合度。过高的阶数可能导致过拟合,即模型在训练数据上表现良好,但在新的数据上泛化能力差。
  • 优缺点:多项式回归的优点在于其能够拟合非线性关系,但缺点是随着项数的增加,模型可能会变得过于复杂,导致过拟合和计算成本的增加。

添加高阶项的时候,也增加了模型的复杂度。随着模型复杂度的升高,模型的容量以及拟合数据的能力增加,可以进一步降低训练误差,但导致过拟合的风险也随之增加。

2.3.2 数学模型

最简单的针对一元的多项式回归数学模型如下:

\hat{\mathbf{y}}(\mathbf{w}, \mathbf{x}) = w_0 + w_1 x + w_2 x^2 ... + w_p x^p

比如,当p=2时,上述模型简化为:

y = w_0 + w_1 x + w_2 x^2

上式是典型的基于一次函数和二次函数的多项式表达式。

2.3.3 Sklearn实现

 Sklearn仍然使用LinearRegression函数实现多项式拟合。不过要首先给添加新的特征,一般是 高阶项。

下面的一个例子是生成一个含有随机噪声的多项式序列,并分别使用一元线性回归和多项式回归两种方式进行拟合。

import numpy as np
import matplotlib.pyplot as plt#生产随机数据100个——范围在(-3,3)
x = np.random.uniform(-3,3,size=100)
X = x.reshape(-1,1) 
y = 0.5 *x**2 + 2*x + 3 + np.random.normal(0,1,size=100)from sklearn.linear_model import LinearRegressionlin_reg = LinearRegression()
lin_reg.fit(X,y)y_predict = lin_reg.predict(X)plt.scatter(x,y)  #原数据
plt.plot(x,y_predict,color='r')  #预测值
plt.show()

使用一元线性回归分析,得到的拟合结果如下图所示:

一元线性回归分析结果

对于上述数据,换成对应的多项式回归分析方法。

X2 = np.hstack([X,X**2])  # 增加二次项lin_reg2 = LinearRegression()
lin_reg2.fit(X2,y)
y_predict2 = lin_reg2.predict(X2)print("Coefficients: \n", lin_reg2.coef_)#绘制结果
plt.scatter(x,y) 
plt.plot(np.sort(x),y_predict2[np.argsort(x)],color='b',linewidth=3)   #对x,y_predict2进行排序,光滑展示
plt.show()

以下是使用多项式回归模型得到的拟合结果,可以和对比线性回归模型拟合结果进行对比。

Coefficients: [2.05014314 0.49320177]
多项式拟合结果示例

除了上述方法之外,还可以通过改变原始数据集的结构来实现多项式拟合,如下面的例子所示。

from sklearn.preprocessing import PolynomialFeaturesploy = PolynomialFeatures(degree = 2)  #表示要为原始数据集添加几次幂
ploy.fit(X)
X2 = ploy.transform(X) #将X转换为多项式特征from sklearn.linear_model import LinearRegressionlin_reg3 = LinearRegression()
lin_reg3.fit(X2,y)
y_predict3 = lin_reg3.predict(X2)print("Coefficients: \n", lin_reg3.coef_)#绘制结果
plt.scatter(x,y) 
plt.plot(np.sort(x),y_predict3[np.argsort(x)], color='magenta', linewidth=3)   #对x,y_predict2进行排序,光滑展示
plt.show()

输出结果如下:

Coefficients: [0.         2.05014314 0.49320177]
另外一种多项式回归的实现方式

小结一下,前一节介绍的线性回归模型,以及上面的多项式回归模型,在训练模型时,通常使用基于均方误差最小化规则求解模型,这种方法称为“最小二乘法”(Least Square Method,简称LSM)。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本点到该直线上的欧氏距离之和最小。线性回归中,基于LSM的参数估计的推导,可查阅参考文献【1】,在此不再赘述。

2.4 带正则项的回归分析

2.4.1 欠拟合和过拟合

在机器学习领域,某个模型在训练数据中表现良好而在测试数据中表现糟糕的现象,称为过拟合(overfit)。过拟合是模型在验证数据上产生的误差比在训练数据上产生的误差(训练误差)大得多的现象。过拟合的一个原因是机器学习模型过于复杂。除了过拟合之外,还有一种情况是欠拟合,但一般是由训练样本过少,模型过于简单所引起的。

先看一个实例,下图所示为对同样的数据,采用不同的模型的拟合结果。

欠拟合和过拟合示例
  • 左侧的图中,拟合程度较低,模型的泛化能力不高。
  • 右侧的图,模型的拟合程度虽然非常高,但考虑到实际的数据集中无法避免的存在着噪声,在理想情况下,希望噪声对模型训练的影响为尽量小。如果模型将训练集中每一个点都精准描述出来,显然包含了许许多多噪声点,在测试集中得到的准确率也不会高。另一方面,该模型复杂度过高,也会导致其泛化能力下降。
  • 中间的图中,展现的是最适合的拟合程度,模型复杂程度适中,能够直观的预测函数的走向。且泛化能力最强。

总结一下过拟合和欠拟合。

(a)欠拟合

  • 产生原因:训练样本数量少、模型复杂度过低、参数还未收敛就停止循环
  • 表现:泛化能力差,训练样本集准确率低,测试样本集准确率低。
  • 解决办法:增加样本数量;增加模型参数,提高模型复杂度;增加循环次数;查看是否是学习率过高导致模型无法收敛

(b)过拟合

  • 产生原因:数据噪声太大;特征太多;模型太复杂
  • 表现:泛化能力差,训练样本集准确率高,测试样本集准确率低。
  • 解决办法:清洗数据;减少模型参数,降低模型复杂度;增加惩罚因子(正则化),保留所有的特征,但是减少参数数值的大小。

2.4.2 正则化

正则化(Regularization)是一种用于防止过拟合的技术,一方面可以降低模型的复杂度,另一方面有助于提高模型的泛华能力。具体而言就是在拟合模型中引入少量偏差(bias)形成新拟合模型,并以此为代价减少拟合模型的方差(variance),使新拟合模型在测试数据中的表现更好。

通俗点说,规则化就是说给损失函数加上一些限制,通过这种规则去规范训练过程中的循环迭代,不会导致模型过于复杂。

2.4.3 L1正则化:岭回归

复杂模型过拟合的一个原因是学习参数 wi 的值太大.

岭回归(Ridge Regression)是一种常用的线性回归方法。在普通最小二乘线性回归中,如果自变量之间存在高度相关性,会导致估计的回归系数不稳定,甚至无法准确估计。岭回归通过引入一个正则化项来解决这个问题。

岭回归的关键思想在最小二乘目标函数中添加一个L_2正则化项,该项对回归系数进行惩罚。这个正则化项是通过对回归系数的平方和\mathbf{w}\mathbf{w}^T进行惩罚,乘以一个调节参数\alpha。当\alpha=0时,岭回归等效于普通最小二乘回归;而当\alpha\rightarrow +\infty,回归系数趋近于0。因此,岭回归通过控制\alpha的取值,平衡了回归系数的拟合能力和稳定性。

优点:

  • 解决共线性问题:岭回归能够有效降低多重共线性对回归系数估计的影响。在存在高度相关的自变量的情况下,岭回归可以提供更稳定和可靠的回归系数估计。
  • 可控制的正则化参数:通过调节正则化参数\alpha的取值,可以控制模型的拟合程度和回归系数的收缩程度。这使得岭回归具有灵活性,可以根据具体问题和数据来平衡模型的复杂性和拟合能力。
  • 适用于高维数据:当数据集中存在大量自变量或特征时,岭回归可以提供更稳定的回归系数估计。它通过控制回归系数的大小来减少对噪声和不相关特征的过度拟合,从而提高模型的泛化能力。

缺点:

  • 引入偏差:岭回归通过对回归系数进行惩罚,可能引入一定的偏差。正则化项的存在会导致回归系数的估计偏离普通最小二乘估计,可能造成一定的信息损失。
  • 需要设置正则化参数:岭回归的性能受到正则化参数\alpha的影响。选择合适的\alpha值需要一定的经验或调参过程。过大或过小的\alpha值可能导致模型性能下降或过拟合的问题。
  • 不具备特征选择能力:与Lasso回归相比,岭回归不具备显式的特征选择能力。它对所有的自变量都进行了收缩,而不会将某些系数缩减到零。因此,在需要进行特征选择的情况下,Lasso回归可能更适合。

2.4.4 L1正则化:Laoss回归

LASSO(Least Absolute Shrinkage and Selection Operator)是一种用于线性回归和特征选择的正则化方法。它和前面介绍的岭回归,构成了最基础也是最常用的两种正则化方法。

它的基本原理:在损失函数中引入L1正则化项,通过最小化数据拟合误差和正则化项的和来实现模型参数的稀疏化和特征选择

这种正则化项以模型参数的绝对值之和\left | \mathbf{w} \right |乘以一个调节参数\alpha的形式出现,促使模型选择少量重要的特征,并将其他特征的系数缩减为零。

通过调节\alpha的值,可以控制模型的复杂度和特征选择的程度。LASSO的优势在于它能够自动进行特征选择,并产生更简洁和解释性强的模型。

优点:

  • 特征选择:LASSO回归通过L1正则化项,倾向于将某些回归系数估计为零,从而实现特征选择的效果。它可以帮助自动识别对目标变量具有显著影响的特征,从而简化模型并提高可解释性。
  • 处理共线性:LASSO回归在存在共线性(自变量之间高度相关)的情况下,可以有效减小回归系数的大小,并将某些相关变量的系数估计为零。这有助于解决多重共线性问题,提高模型的稳定性和泛化能力。
  • 可解释性:由于LASSO回归具有稀疏性,它仅选择了与目标变量相关的特征,使得模型的结果更易解释和理解。

缺点:

  • 参数选择:LASSO回归的性能高度依赖正则化参数λ的选择。选择合适的λ值并不容易,需要进行交叉验证或其他优化方法来确定最佳的正则化参数,这增加了使用LASSO回归的复杂性。
  • 不稳定性:在自变量之间存在高度相关性的情况下,LASSO回归可能对于数据中微小的变化非常敏感,导致系数估计的不稳定性。这意味着对于不同的训练集,可能会得到不同的结果。
  • 随机性:当多个特征高度相关时,LASSO回归倾向于随机选择其中之一,并将其他特征的系数估计为零。这意味着在拟合过程中,具有相似性的特征可能会被选择或排除,具有一定的随机性。

2.4.5 比较

岭回归和 Lasso 回归计算学习参数时的情况分别如图 2-11a 和图 2-11b 所示。

岭回归和Lasso回归的图例解释

图中,绿线是线性回归的误差函数,蓝线是惩罚项的相关函数。岭回归的惩罚项是学习参数的平方和,所以其图形是图(a)所示的圆形;Lasso 回归的惩罚项是绝对值的和,所以其图形是图(b)所示的四边形。原来的函数(线性回归的误差函数)与这些函数的交点就是带有正则化项的误差函数的最佳解。可以看出,在加入惩罚项后,图(a)的岭回归的学习参数得到了抑制。图 (b)的 Lasso 回归的情况与岭回归相似,学习参数同样被抑制,但学习参数 w2 变为了 0。

Lasso 回归计算的是函数与这种四边形函数的交点,因此具有学习参数容易变为 0 的特点。利用这个特点,我们可以使用学习参数不为 0 的特征来构建模型,从而达到利用 Lasso 回归选择特征的效果。这样不仅能提高模型的泛化能力,还能使模型的解释变容易。

2.5 综合实例

最后,实现一个实例来对本节和上一节内容进行总结。

参考文献:

【1】周志华,《机器学习》,清华大学出版社,2016.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Point Cloud Library (PCL) for Python - pclpy 安装指南 (1)

以下所有的版本号务必按照说明安装。 1.安装 Python 3.6 https://www.python.org/ftp/python/3.6.8/python-3.6.8-amd64.exe #或 百度网盘 2.确认 Python 版本为 3.6.x python #Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on…

给后台写了一个优雅的自定义风格的数据日志上报页面

highlight: atelier-cave-dark 查看后台数据日志是非常常见的场景,经常看到后台的小伙伴从服务器日志复制一段json数据字符串,然后找一个JSON工具网页打开,在线JSON格式化校验。有的时候,一些业务需要展示mqtt或者socket的实时信息展示,如果不做任何修改直接展示一串字符…

学习笔记——动态路由——IS-IS中间系统到中间系统(特性之路由撤销)

6、路由撤销 ISIS路由协议的路由信息是封装在LSP报文中的TLV中的,但是它对撤销路由的处理和OSPF的处理方式类似。 在ISIS中撤销一条路由实则是将接口下的ISIS关闭: 撤销内部路由: 在ISIS中路由信息是由IP接口TLV和IP内部可达性TLV共同来描…

合宙 Air780E模块 AT 指令 MQTT连接

固件说明 重启模块 //tx ATRESET//rx ATRESETOK ^boot.romv!\n RDY^MODE: 17,17E_UTRAN ServiceCGEV: ME PDN ACT 1NITZ: 2024/07/10,08:33:440,0查询模块版本信息 //tx ATCGMR//rx ATCGMRCGMR: "AirM2M_780E_V1161_LTE_AT"OK基本流程 4G模块支持MQTT和MQTT SSl协…

顶顶通呼叫中心中间件-私有化asrproxy配置热词模型

顶顶通呼叫中心中间件-私有化asrproxy配置热词模型 1、配置热词文件 将热词存在一个txt文件中,比如:hotword.txttxt文本里面写热词,一个热词一行,用utf8编码把热词文件上传到asrproxy程序目录中,路径:/dd…

读人工智能全传10深度思维

1. 深度思维 1.1. DeepMind 1.1.1. 深度思维 1.1.2. 2014年的员工不足25人 1.1.3. 深度思维公司公开宣称其任务是解决智能问题 1.1.4. 2014年谷歌收购DeepMind,人工智能突然成了新闻热点,以及商业热点 1.1.4.1. 收购报价高达4亿英镑 1.1.4.2. 深度…

头歌资源库(26)方格填数

一、 问题描述 二、算法思想 这是一个排列组合问题。我们可以使用动态规划的思想来求解。 假设dp[i]表示填入前i个位置的数字的方案数。考虑第i个位置,它有9种填法(0~9减去前一个位置上的数字),则有dp[i] 9 * dp[i-1]。由于第…

240711_昇思学习打卡-Day23-LSTM+CRF序列标注(2)

240711_昇思学习打卡-Day23-LSTMCRF序列标注(2) 今天记录LSTMCRF序列标注的第二部分。仅作简单记录 Score计算 首先计算正确标签序列所对应的得分,这里需要注意,除了转移概率矩阵𝐏外,还需要维护两个大小…

html5——CSS基础选择器

目录 标签选择器 类选择器 id选择器 三种选择器优先级 标签指定式选择器 包含选择器 群组选择器 通配符选择器 Emmet语法&#xff08;扩展补充&#xff09; 标签选择器 HTML标签作为标签选择器的名称&#xff1a; <h1>…<h6>、<p>、<img/> 语…

如何做好漏洞扫描工作提高网络安全

在数字化浪潮席卷全球的今天&#xff0c;企业数字化转型已成为提升竞争力、实现可持续发展的关键路径。然而&#xff0c;这一转型过程并非坦途&#xff0c;其中网络安全问题如同暗礁般潜伏&#xff0c;稍有不慎便可能引发数据泄露、服务中断乃至品牌信誉受损等严重后果。因此&a…

edge 学习工具包 math solver

简介 推荐微软推出的学习工具中的两项工具&#xff1a;数学求解器和 pdf 阅读器。 打开 edge 学习工具包的方法 &#xff1a;右上角三点-更多工具-学习工具包。 math solver 除了基础的计算求解外&#xff0c;还用图标展示公式&#xff0c;清晰直观。 地址&#xff1a;求解…

CentOS7使用yum命令报错

目录结构 前言使用yum命令&#xff0c;报错信息问题排查解决方案参考文章 前言 安装CentOS 7 虚拟机&#xff0c;使用yum命令报错&#xff0c;调查整理如下&#xff1a; 使用yum命令&#xff0c;报错信息 [rootlocalhost ~]# sudo yum install net-tools 已加载插件&#xff…

每天五分钟深度学习:向量化技术在神经网络中的应用

本文重点 向量化技术,简而言之,就是利用矩阵运算(而非传统的for循环)来执行大规模的计算任务。这种技术依赖于单指令多数据(SIMD)架构,允许一个指令同时对多个数据元素执行相同的操作。例如,在向量化加法中,不再需要逐个元素进行加法操作,而是可以一次性对整个向量执…

【电子通识】无源元件与有源元件的定义和区别是什么?

当提到构成电路的电子器件时,许多人可能会想到晶体管、电容器、电感器和电阻器等器件。一般情况下,我们使用的电子器件分为两大类,即“有源元件”和“无源元件”。 有源元件是主动影响(如放大、整流、转换等)所供给电能的元件。 无源元件是对所供给的电能执行被动…

流程图编辑框架LogicFlow-vue-ts和js

LogicFlow官网https://site.logic-flow.cn/LogicFlow 是一款流程图编辑框架&#xff0c;提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端研发自定义开发各种逻辑编排场景&#xff0c;如流程图、ER图、BPMN流程等。在工作审批配…

【zabbix7】开启HTTP authentication实现单点登录

开启HTTP authentication实现单点登录 一、新建http验证用户 htpasswd -c /etc/nginx/.htpasswd another_username # 在提示中输入密码二、新建Nginx配置文件 把zabbix.conf拷贝一份&#xff0c;然后修改listen监听的端口。 cp zabbx.conf zabbix_http.conf 每个location中新…

【Dison夏令营 Day 16】如何使用 Python 中的 PyGame 制作俄罗斯方块游戏

俄罗斯方块(Tetris)是一款经典的益智游戏&#xff0c;游戏的目的是将落下的几何图形片&#xff08;称为 “俄罗斯方块”&#xff09;排列起来&#xff0c;填满水平线&#xff0c;不留空隙。当一条线被完全填满时&#xff0c;它就被清除了&#xff0c;玩家就能获得分数。随着四角…

操作系统——内存管理(面试准备)

虚拟内存 单片机没有操作系统&#xff0c;每次写完代码&#xff0c;都需要借助工具把程序烧录进去&#xff0c;这样程序才能跑起来。 另外&#xff0c;单片机的CPU是直接操作内存的物理地址。 在这种情况下&#xff0c;想在内存中同时运行两个程序是不可能的&#xff0c;如果第…

(CVPR-2024)SwiftBrush:具有变分分数蒸馏的单步文本到图像扩散模型

SwiftBrush&#xff1a;具有变分分数蒸馏的单步文本到图像扩散模型 Paper Title&#xff1a;SwiftBrush: One-Step Text-to-Image Diffusion Model with Variational Score Distillation Paper 是 VinAI Research 发表在 CVPR 24 的工作 Paper地址 Code:地址 Abstract 尽管文本…

Flutter-实现物理小球碰撞效果

效果 引言 在Flutter应用中实现物理动画效果&#xff0c;可以大大提升用户体验。本文将详细介绍如何在Flutter中创建一个模拟物理碰撞的动画小球界面&#xff0c;主要代码实现基于集成sensors_plus插件来获取设备的加速度传感器数据。 准备工作 在开始之前&#xff0c;请确保…