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)。过拟合是模型在验证数据上产生的误差比在训练数据上产生的误差(训练误差)大得多的现象。过拟合的一个原因是机器学习模型过于复杂。除了过拟合之外,还有一种情况是欠拟合(underfit),通常是由训练样本过少,模型过于简单所引起的。

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

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

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

(a)欠拟合

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

(b)过拟合

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

2.4.2 正则化

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

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

2.4.3 L1正则化:岭回归

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

(a)数学模型

岭回归的目标函数(即损失函数)可用下式表示,

|| X w - y||_2^2 + \alpha ||w||_2^2

式中,第一项是一般的线性回归损失函数,第二项称为“惩罚项”(即正则化项),本质上是学习参数w的平方和。参数\alpha是用来控制正则化强度的参数,\alpha越大,对学习参数的抑制越强;越小,对训 练数据过拟合的可能性越大。当\alpha=0时,岭回归等效于普通最小二乘回归;而当\alpha\rightarrow +\infty,回归系数趋近于0。因此,岭回归通过控制\alpha的取值,平衡了回归系数的拟合能力和稳定性。

(b)关键思想

岭回归的关键思想在最小二乘目标函数中添加一个L_2正则化项,该项对回归系数进行惩罚。这个正则化项是通过对回归系数的平方和\mathbf{w}\mathbf{w}^T进行惩罚,乘以一个调节参数\alpha

(c)性能分析

优点:

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

缺点:

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

2.4.4 L1正则化:Laoss回归

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

(a)数学模型

Lasso回归的损失函数定义如下:

||X w - y||_2 ^ 2 + \alpha ||w||_1

对比岭回归,区别在于第二项“惩罚项”是学习参数w的绝对值和。参数\alpha的作用相同。

(b)关键思想

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

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

​​​​​​​(c)性能分析

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.rhkb.cn/news/375341.html

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

相关文章

从零开始的python学习生活2

接上封装 class Phone:__volt0.5def __keepsinglecore(self):print("让cpu以单核运行")def if5G(self):if self.__volt>1:print("5G通话已开启")else:self.__keepsinglecore()print("电量不足,无法使用5G通话,已经设置为单…

使用F1C200S从零制作掌机之debian文件系统完善NES

一、模拟器源码 源码:https://files.cnblogs.com/files/twzy/arm-NES-linux-master.zip 二、文件系统 文件系统:debian bullseye 使用builtroot2018构建的文件系统,使用InfoNES模拟器存在bug,搞不定,所以放弃&…

[Qt] Qt Creator中,新建QT文件时选择界面模版下的各选项

在Qt Creator中,新建文件时选择界面模版下的各选项具有特定的意义,这些选项主要帮助开发者根据项目需求快速生成不同类型的文件。以下是对这些选项的详细解释: 0. Qt Item Model 意义:列表模型是Qt中用于表示和操作数据的强大抽…

Spring Boot:连接MySQL错误Public Key Retrieval is not allowed

环境: MySQL版本:8.0.17 SpringBoot版本:2.5.15 解决 解决方式很简单,在数据库配置连接字符串spring.datasource.url末尾添加&allowPublicKeyRetrievaltrue即可,如下图: 重新启动,恢复正常…

了解光耦合器:实际应用和有效使用

光耦合器,也称为光隔离器,是电子电路中必不可少的组件,旨在利用光波在隔离电路之间传输电信号。该技术在增强电路安全性、降低噪音和电气隔离方面具有关键优势,在从工业控制系统到消费电子产品的各种应用中都具有不可估量的价值。…

初中生物知识点总结(人教版)

第一章 认识生物 一、 生物的特征: 1. 生物的生活需要营养 2. 生物能进行呼吸 3. 生物能排出身体内产生的废物 4. 生物能对外界的刺激做出反应 5. 生物能生长和繁殖 除病毒以外,生物都是由细胞构…

SpringBoot整合XXL_JOB示例

XXL-JOB 是一个分布式任务调度平台,主要用于管理和执行定时任务。它适用于各种场景,例如定时任务、批处理任务、分布式任务等。XXL-JOB 提供了丰富的功能,使得任务调度变得简单、高效和可靠。以下是 XXL-JOB 的一些主要功能和特点&#xff1a…

myeclipse开发ssm框架项目图书管理系统 mysql数据库web计算机毕业设计项目

摘 要 随着计算机的广泛应用,其逐步成为现代化的标志。图书馆的信息量也会越来越大,因此需要对图书信息、借书信息、还书信息等进行管理,及时了解各个环节中信息的变更,要对因此而产生的单据进行及时的处理,为了提高高…

Dify 与 Xinference 最佳组合 GPU 环境部署全流程

背景介绍 在前一篇文章 RAG 项目对比 之后,确定 Dify 目前最合适的 RAG 框架。本次就尝试在本地 GPU 设备上部署 Dify 服务。 Dify 是将模型的加载独立出去的,因此需要选择合适的模型加载框架。调研一番之后选择了 Xinference,理由如下&…

搞不清啊?伦敦金与上海金区别是?

进入黄金市场的朋友,有可能会被各式各样的黄金交易品种带得眼花缭乱,其实各品种虽然都以黄金作为投资标的物,但是也是各有不同的,下面我们就来比较一下相似的投资品种——伦敦金和上海金。 首先在比较之前,我们要搞清楚…

SpringBoot新手快速入门系列教程十一:基于Docker Compose部署一个最简单分布式服务项目

如果您还对于Docker或者Docker Compose不甚了解,可以劳烦移步到我之前的教程: SpringBoot新手快速入门系列教程九:基于docker容器,部署一个简单的项目 SpringBoot新手快速入门系列教程十:基于Docker Compose&#xf…

(Windows环境)FFMPEG编译,包含编译x264以及x265

本文使用 MSYS2 来编译 ffmpeg 一、安装MSYS2 MSYS2 是 Windows 下的一组编译套件,它可以在 Windows 系统中模拟 Linux 下的编译环境,如使用 shell 运行命令、使用 pacman 安装软件包、使用 gcc (MinGW) 编译代码等。 MSYS2 的安装也非常省心&#x…

揭秘GPT-4o:未来智能的曙光

引言 近年来,人工智能(AI)的发展突飞猛进,尤其是自然语言处理(NLP)领域的进步,更是引人注目。在这一背景下,OpenAI发布的GPT系列模型成为了焦点。本文将详细探讨最新的模型GPT-4o&a…

浅析Nginx技术:开源高性能Web服务器与反向代理

什么是Nginx? Nginx是一款轻量级、高性能的HTTP和反向代理服务器,也可以用作邮件代理服务器。它最初由俄罗斯的程序员Igor Sysoev在2004年开发,并于2004年首次公开发布。Nginx的主要优势在于其非阻塞的事件驱动架构,能够处理大量并…

【多GPU训练方法】

一、数据并行 这是最常用的方法。整个模型复制到每个GPU上。训练数据被均匀分割,每个GPU处理一部分数据。所有GPU上的梯度被收集并求平均。通常使用NCCL(NVIDIA Collective Communications Library)等通信库实现。参数更新 使用同步后的梯度…

01MFC建立单个文件类型——画线

文章目录 选择模式初始化文件作用解析各初始化文件解析 类导向创建鼠标按键按下抬起操作函数添加一个变量记录起始位置注意事项代码实现效果图 虚实/颜色线 选择模式 初始化文件作用解析 运行: 各初始化文件解析 MFC(Microsoft Foundation Classes&am…

爬虫-浏览器自动化

什么是selenium selenium是浏览器自动化测试框架,原本用于网页测试。但到了爬虫领域,它又成为了爬虫的好帮手。有了 selenium,我们便不再需要判断网页数据加载的方式,只要让 selenium 自动控制浏览器,就像有双无形的手…

数据结构--堆,堆排序

1.树概念及结构 1.1树的概念 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 。 有一个 特殊的结…

判断链表中是否有环(力扣141.环形链表)

这道题要用到快慢指针。 先解释一下什么是快慢指针。 快慢指针有两个指针,走得慢的是慢指针,走得快的是快指针。 在这道题,我们规定慢指针一次走一步,快指针一次走2步。 如果该链表有环,快慢指针最终会在环中相遇&a…

通过vagrant与VirtualBox 创建虚拟机

1.下载vagrant与VirtualBox【windows版本案例】 1.1 vagrant 下载地址 【按需下载】 https://developer.hashicorp.com/vagrant/install?product_intentvagranthttps://developer.hashicorp.com/vagrant/install?product_intentvagrant 1.2 VirtualBox 下载地址 【按需下载…