【机器学习】多项式回归的思想以及在sklearn中使用多项式回归(含示例+代码)

2023-11-07

一、多项式回归

回归在我们的日常生活中有着广泛的应用,线性回归法有一个很大的局限性,就是假设数据背后是存在线性关系的,但是实际上,具有线性关系的数据集是相对来说比较少的,更多时候,数据之间是具有的非线性的关系,那么我们想要用线性回归法来对非线性的数据进行处理应该怎么办呢,我们可以使用多项式回归的手段来改进线性回归法,使线性回归法也可以对非线性的数据进行处理,并进行预测。

1.1 什么是多项式回归

对于线性回归来说,对于数据的最终拟合效果,我们是想找到一条直线,使其尽可能的拟合这些数据,若只有一个特征的话,我们可以称为单变量线性回归,数学表达式如下:
y = θ 0 + θ 1 x y=\theta_0+\theta_1 x y=θ0+θ1x
其中 x x x为样本特征, θ 1 \theta_1 θ1 θ 0 \theta_0 θ0为参数。

但是对于实际应用中遇到的数据来说,虽然可以使用一条直线来拟合数据,但是其分布很多时候是具有更强的非线性的关系,也就是说,使用二次曲线来拟合这些数据的话效果会更好,如果也是只有一个特征的话,那么方程可以写为:

y = θ 2 x 2 + θ 1 x + θ 0 y=\theta_2 x^2+\theta_1 x+\theta_0 y=θ2x2+θ1x+θ0

虽然称其为一个特征的二次方程,但是可以从另一个方向来理解这个方程,如果将 x 2 x^2 x2看成是一个特征, x x x看成另一个特征,这就将其看成是含有两个特征的数据集,多了一个 x 2 x^2 x2的特征,从这个方向来看的话,这个式子依然是一个线性回归的式子,从 x x x的角度来看,就是一个非线性的方程,这样的方式就称为多项式回归。

相当于为样本多添加了几个特征,这些特征是原先样本的多项式项(像是 x 2 x^2 x2就是对 x x x进行了平方),增加了这些特征以后就可以使用线性回归的思路,来更好的拟合原来的数据,本质上就是,求出了原来的特征而言的非线性的曲线,即为了更好地拟合数据进行了升维。

二、实战演练

展示一下部分数据:

在这里插入图片描述
从数据上我们看不出直观的数据分布,可视化一下:

plt.scatter(data.iloc[:,0],data.iloc[:,1])
plt.show()

在这里插入图片描述

2.1 用线性回归的方式

首先引用LinearRegression这个类,然后实例化以后进行fit,fit传入X和y

X = np.array(data.iloc[:,0]).reshape(-1,1)
y = np.array(data.iloc[:,1]).reshape(-1,1)
estimator_1 = LinearRegression()
estimator_1.fit(X,y)
print('参数分别为:',estimator_1.coef_[0,0],estimator_1.intercept_[0])

结果为:

参数分别为: 1.0760075113688143 1831.2332236366492

我们对结果进行可视化如下:

x = np.linspace(X.min(),X.max(),len(X))
plt.scatter(data.iloc[:,0],data.iloc[:,1])
plt.plot(x,estimator_1.coef_[0,0]*x+estimator_1.intercept_[0],c='red')
plt.show()

在这里插入图片描述
我们可以看到,效果很差劲!

2.2 使用多项式回归

首先加载好需要的包,再设置好的虚拟的数据集,之后引用PolynomialFeatures类,使用方法同样的,先进行实例化,传入参数degree,其表示为原来的数据集添加的最高的幂,这里设置为2,这就初始化好了,然后fit一下X,之后调用poly.transform这个方式,将其转换成多项式的特征。

from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
poly.fit(X,y)
X_2 = poly.transform(X).reshape(-1,3)
print(X_2)
[[1.00000000e+00 2.84259000e+02 8.08031791e+04]
 [1.00000000e+00 2.97780000e+02 8.86729284e+04]
 [1.00000000e+00 3.12441000e+02 9.76193785e+04]
 [1.00000000e+00 3.25961000e+02 1.06250574e+05]
 [1.00000000e+00 3.38341000e+02 1.14474632e+05]
 [1.00000000e+00 3.51006000e+02 1.23205212e+05]
 [1.00000000e+00 3.65095000e+02 1.33294359e+05]
 [1.00000000e+00 3.79756000e+02 1.44214620e+05]
 [1.00000000e+00 3.93846000e+02 1.55114672e+05]
 [1.00000000e+00 4.08219000e+02 1.66642752e+05]
 [1.00000000e+00 4.23161000e+02 1.79065232e+05]
 [1.00000000e+00 4.37534000e+02 1.91436001e+05]
 [1.00000000e+00 4.51907000e+02 2.04219937e+05]
 [1.00000000e+00 4.67419000e+02 2.18480522e+05]
 [1.00000000e+00 4.83499000e+02 2.33771283e+05]
 [1.00000000e+00 4.99577000e+02 2.49577179e+05]
 [1.00000000e+00 5.15942000e+02 2.66196147e+05]
 [1.00000000e+00 5.33445000e+02 2.84563568e+05]
 [1.00000000e+00 5.51517000e+02 3.04171001e+05]
 [1.00000000e+00 5.69303000e+02 3.24105906e+05]
 [1.00000000e+00 5.87091000e+02 3.44675842e+05]
 [1.00000000e+00 6.05163000e+02 3.66222257e+05]
 [1.00000000e+00 6.23796000e+02 3.89121450e+05]
 [1.00000000e+00 6.42698000e+02 4.13060719e+05]
 [1.00000000e+00 6.61593000e+02 4.37705298e+05]
 [1.00000000e+00 6.79077000e+02 4.61145572e+05]
 [1.00000000e+00 6.96857000e+02 4.85609678e+05]
 [1.00000000e+00 7.15484000e+02 5.11917354e+05]
 [1.00000000e+00 7.35527000e+02 5.40999968e+05]
 [1.00000000e+00 7.56130000e+02 5.71732577e+05]
 [1.00000000e+00 7.76730000e+02 6.03309493e+05]
 [1.00000000e+00 7.97333000e+02 6.35739913e+05]
 [1.00000000e+00 8.17933000e+02 6.69014392e+05]
 [1.00000000e+00 8.37948000e+02 7.02156851e+05]
 [1.00000000e+00 8.57667000e+02 7.35592683e+05]
 [1.00000000e+00 8.77380000e+02 7.69795664e+05]
 [1.00000000e+00 8.97383000e+02 8.05296249e+05]
 [1.00000000e+00 9.17676000e+02 8.42129241e+05]
 [1.00000000e+00 9.37107000e+02 8.78169529e+05]
 [1.00000000e+00 9.55957000e+02 9.13853786e+05]
 [1.00000000e+00 9.73652000e+02 9.47998217e+05]
 [1.00000000e+00 9.91055000e+02 9.82190013e+05]
 [1.00000000e+00 1.00874000e+03 1.01755639e+06]
 [1.00000000e+00 1.02643000e+03 1.05355854e+06]
 [1.00000000e+00 1.04354000e+03 1.08897573e+06]
 [1.00000000e+00 1.05979000e+03 1.12315484e+06]
 [1.00000000e+00 1.07604000e+03 1.15786208e+06]
 [1.00000000e+00 1.09171000e+03 1.19183072e+06]]

第一列的1可以看作为 x x x的0次方,第2列就是原来的样本特征,第3列就是 x x x的平方的特征,以此类推。

之后的操作同上,引用LinearRegression这个类,然后实例化再进行fit,拟合后,使用predict方法得到预测结果,并对其进行绘制。

estimator_2 = LinearRegression()
estimator_2.fit(X_2,y)
y_predict = estimator_2.predict(X_2)
plt.scatter(data.iloc[:,0],data.iloc[:,1])
plt.plot(X,y_predict,c='red')
plt.show()

在这里插入图片描述
同样的,看一下系数和截距:

[[ 0.00000000e+00  8.22812669e+00 -5.23124852e-03]] [1831.23322364]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【机器学习】多项式回归的思想以及在sklearn中使用多项式回归(含示例+代码) 的相关文章

  • 红黑树 java

    1每个节点是红色或者黑色 2根节点是黑色 3每一个叶子节点 最后的空节点 是黑色 4如果一个节点是红色 那么他的孩子节点都是黑色 红色节点都是向左倾斜 5从任意一个节点到叶子节点 经过的黑色节点是一样的 也满足二分搜索树的性质 是绝对平衡的
  • redis学习笔记01:String类型的实现SDS

    看了 Redis设计与实现 第二章关于redis底层对于String类型的实现 SDS Simple Dynamic String 简单动态字符串 的内容 在这里做一点简单的总结笔记 一 SDS结构 struct sdshdr 记录buf数

随机推荐

  • AtCoder Beginner Contest 314

    A 3 14 atcoder jp AC代码 include
  • 数字电路设计之低功耗设计方法四:预计算

    pre computation 这是一个预先计算 在一定条件下 可以做出判断之后 对于一些没必要的计算那就不计算 如果应用已有的计算无法得出正确的结果 那么就继续往下计算直到计算出所需的结果 这个做法相比原始的全部计算的方法大大降低了动态功
  • [JAVAee]多线程-wait方法与notify方法

    我们知道 线程之间是抢占式执行的 通俗来说 就是随机调度的 每一个线程什么时候运行我们也不知道 这里就来介绍 让线程可以按照一定顺序执行的方法 目录 1 wait方法 2 notify notifyAll方法 3 使用wait与notify
  • IPMI与BMC简介

    智能平台管理接口 IPMI 是一种开放标准的硬件管理接口规格 定义了嵌入式管理子系统进行通信的特定方法 IPMI 信息通过基板管理控制器 BMC 位于 IPMI 规格的硬件组件上 进行交流 使用低级硬件智能管理而不使用操作系统进行管理 具有
  • Window localStorage 属性与Window sessionStorage 属性(Js将数据存储在浏览器端)

    一 目的 实现浏览器全局变量 即可轻松解决跨页面传值问题 二 简介 1 localStorage 和 sessionStorage 属性允许在浏览器中存储 key value 对的数据 2 localStorage用于长久保存整个网站的数据
  • 病理切片的相关文章总结

    1 数字病理学中的人工智能 用于诊断和精确肿瘤学的新工具 2 小样本学习研究综述 中科院计算所 3 基于无监督组织分类的结直肠癌生存预测研究 4 常规组织病理学弱监督无标注癌检测与基因型预 5 肿瘤拓扑图 无监督深度学习 6 一种基于原型学
  • Qt部件基类QWidget

    1 默认部件基类 QT提供的默认部件基类包括QMainWindow QWidget 和QDialog这三种 这三个部件基类也是用的最多的 QMainWindow是带有菜单栏 工具栏 状态栏的主窗口类 它有自己单独的布局 布局有一个中心区域
  • 使用Spring实现“控制反转”

    1 新建Java项目 目录结构如下 2 Spring配置文件applicationContext xml代码如下
  • Linux查看当前tcp连接数

    查看有哪些IP连接本机 netstat an 统计80端口连接数 netstat nat grep 80 wc l 统计已连接上的 状态为 established netstat na grep ESTABLISHED wc l 查看80端
  • 项目中集成 axis2 发布webservice

    在网上找了很多例子 发觉很多都是脱离项目 单独使用axis2包发布webservice接口 实际开发中 一般都是跟随项目启动之后 自动发布接口 接下来简单讲解一下 在项目中集成发布axis2 webservice接口 1 打开axis2 w
  • el-table树形表格实现复选框多选效果

    2023 7 26今天我学习了如何使用树形表格的时候进行复选框的多选效果 当我们使用树形结构表格需要进行多选功能操作的时候会发现点击全选的时候 只有一级表格数据会被选中 问题如图 我们需要实现的是点击全选的不管是几级表格数据都可以被选中 处
  • 人工智能开源社区论坛----开源助力多领域AI生态发展

    ChinaOSC 2022 人工智能开源社区论坛 开源助力多领域AI生态发展技术论坛将于2022年8月20日13 00 17 00在陕西省西安高新国际会议中心召开 本论坛将围绕 开源社区助力多领域AI生态发展 主题 邀请AI开源领域顶级技术
  • Golang 中的可测试示例函数(Example Function)详解

    Golang 可测试示例含函数 Example Function 示例函数类似于单元测试函数 但没有 testing 类型的参数 编写示例函数也是很容易的 创建对应的测试文件 在 Go 项目的源代码目录下创建一个新的文件 和被测代码文件在同
  • 模型选择、欠拟合和过拟合学习笔记

    训练误差 泛化误差 训练误差 模型在训练数据集上表现出的误差 泛化误差 指模型在任意一个测试数据样本上表现出的误差的期望 并常常通过测试数据集上的误差来近似 过拟合 欠拟合 过拟合 训练误差远小于其在测试数据集上的误差 欠拟合 模型无法得到
  • 6-Gans-03_Face_Generator人脸生成

    人脸生成项目 本项目中 使用生成式对抗网络 Generative Adversarial Nets 来生成新的人脸图像 获取数据 使用以下数据集 MNIST CelebA 由于 CelebA 数据集非常大 所以先在 MNIST 数据集上测试
  • 【Matlab学习笔记】【函数学习】nargin 参数

    转自 http baike haosou com doc 6930505 7152746 html 在matlab中定义一个函数时 在函数体内部 nargin指出了输入参数的个数 特别是在利用了可变参数列表的函数中 用nargin获取输入参
  • log4j

    1 导入Log4j包
  • 论文笔记-深度估计(3)Predicting Depth, Surface Normals and Semantic Labels with a Common Multi-Scale...

    Predicting Depth Surface Normals and Semantic Labels with a Common Multi Scale Convolutional Architecture 这篇文章是eigen 201
  • 负载均衡设备会话保持机制介绍

    会话持久性连接简介 会话保持是负载均衡器设备的一种机制 用于识别客户端与服务器之间交互过程的关连性 在进行负载均衡的同时还保证一系列相关连的访问请求会保持分配到同一台服务器上 针对不同的业务场景需要不同的会话保持配置 并且并不是所有业务系统
  • 【机器学习】多项式回归的思想以及在sklearn中使用多项式回归(含示例+代码)

    一 多项式回归 回归在我们的日常生活中有着广泛的应用 线性回归法有一个很大的局限性 就是假设数据背后是存在线性关系的 但是实际上 具有线性关系的数据集是相对来说比较少的 更多时候 数据之间是具有的非线性的关系 那么我们想要用线性回归法来对非