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的实时信息展示,如果不做任何修改直接展示一串字符…

将有序数组转化成二叉搜索数

1 问题 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。 2 方法 采用递归的方法找到root结点,以及左子树和右子树。 代码清单 1 clas…

自动驾驶的规划控制简介

自动驾驶的规划控制是自动驾驶系统中的核心组成部分,它负责生成安全、合理且高效的行驶轨迹,并控制车辆按照这个轨迹行驶。规划控制分为几个层次,通常包括行为决策(Behavior Planning)、轨迹规划(Trajector…

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

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

Zip压缩文件的操作

ZipInputStreamhe和ZipOutputStream这两个类本身不具备读写文件的能力,这两个类都间接继承自Filter Input Stream,因此它们的构造方法允许传入一个真正具备读写功能的字符流对象。如FileInputStream和FileOutputStream的对象,从尾完成文件的读…

数据赋能(145)——开发:数据拆分——实施过程、应用特点

实施过程 数据拆分的实施过程通常涉及以下几个关键步骤: 确定拆分目标和需求: 明确数据拆分的目的和需求,例如是为了减少数据处理的复杂性、提高查询效率还是为了满足特定的业务需求。根据需求确定拆分后的数据结构和拆分规则。选择拆分方法…

合宙 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协…

【LeetCode】存在重复元素 II

目录 一、题目二、解法完整代码 一、题目 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…

如何安装和管理RabbitMQ

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 将事情推迟一段时间而不是立即去做&#xff0c;可能被认为是懒惰的。事实上&#xff0c;大多数情况下可能确实如此。然而&#xff…

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

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

音视频入门基础:H.264专题(12)——FFmpeg源码中通过SPS属性计算视频分辨率的实现

一、引言 在上一节《音视频入门基础&#xff1a;H.264专题&#xff08;11&#xff09;——计算视频分辨率的公式》中&#xff0c;讲述了通过SPS中的属性计算H.264编码的视频的分辨率的公式。本文讲解FFmpeg源码中计算视频分辨率的实现。 二、FFmpeg源码中计算视频分辨率的实现…

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

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

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

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

ArduPilot开源飞控之AP_Mount_Backend

ArduPilot开源飞控之AP_Mount_Backend 1. 源由2. 框架设计2.1 类构造函数2.2 公共方法2.2.1 重要方法2.2.2 运动能力&#xff08;需要在子类中重写&#xff09;2.2.3 模式处理2.2.4 目标处理2.2.5 命令处理2.2.6 消息传递和状态2.2.7 回调函数2.2.8 相机控制2.2.9 测距仪 2.3 保…

samout 结构再优化 收敛速度再加快

代码 import torch import numpy as npclass MaxState(torch.nn.Module):def __init__(self, hidden_dim, heads, win):super(MaxState, self).__init__()assert hidden_dim % heads 0, "Hidden size must be divisible by the number of heads."self.head_size h…

基于python实现并编译提升cpu与内存使用率的脚本

在服务器运维过程中&#xff0c;有很多公司会对服务器的资源使用率进行监测&#xff0c;发现使用率不高了&#xff0c;会对服务器降配。如果你是乙方&#xff0c;你可以尝试一下这种方法&#xff0c;脚本提升cpu与内存的使用率。如果你需要对服务器性能或者服务稳定性进行测试&…

Redis 布隆过滤器性能对比分析

redis 实现布隆过滤器实现方法&#xff1a; 1、redis 的 setbit 和 getbit 特点&#xff1a;对于某个bit 设置0或1&#xff0c;对于大量的值需要存储&#xff0c;非常节省空间&#xff0c;查询速度极快&#xff0c;但是不能查询整个key所有的bit&#xff0c;在一次请求有大量…

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

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

担心插座预留的不够用,家里装修留多少开关插座

全屋插座布局,防漏防后悔      家里装修留多少开关插座?留多了费钱      留少了还不够用,给大家整理了全屋开关插座的布局      1,入户门留5个,门外给监控器1个      门旁边给卧室,走廊,客厅,中央空调各留1个      2,客厅留10个,电视留4-5个, 沙发两边各1…