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

多项式回归

多项式回归

  • 多项式回归 是非线性回归的一种,之前讨论的线性回归都是直线,而多项式回归则是曲线的回归,它通过引入原始预测变量的高阶项(如平方、立方等)来拟合数据的非线性模式。
  • 在多项式回归中,虽然模型对数据的关系是非线性的,但它依然是线性的,因为这种非线性体现在特征变换上,而不是模型的系数和变量之间的关系。这就是为什么多项式回归被视为线性回归的一个特例。
  • 例如,一个二次多项式回归模型可以表述为 y = β 0 + β 1 x + β 2 x 2 + ϵ y = \beta_0 + \beta_1x + \beta_2x^2 + \epsilon y=β0+β1x+β2x2+ϵ,其中模型对于系数 (\beta) 是线性的,尽管它对于 (x) 是非线性的。

本文基于教程链接数据基于https://github.com/trekhleb/homemade-machine-learning/blob/master/data/non-linear-regression-x-y.csv

首先,我们取到的数据集散点图如下,这种情况下用一条直线来回归则有些不恰当:
在这里插入图片描述
所以就需要使用一条多项式来模拟曲线回归。在多项式回归中最重要的就是选择多项式的复杂度,
Y = β 0 + β 1 X + β 2 X 2 + β 3 X 3 + . . . + β n X n + ϵ Y = \beta_0 + \beta_1X + \beta_2X^2 + \beta_3X^3 + ... + \beta_nX^n + \epsilon Y=β0+β1X+β2X2+β3X3+...+βnXn+ϵ多项式的复杂度(即公式中的n)不宜太低(欠拟合)或过高(过拟合)。如下图就是过低导致的欠拟合:
在这里插入图片描述
具体python代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split #用于划分训练集和测试集。
from sklearn.preprocessing import PolynomialFeatures #用于生成多项式特征。
from sklearn.linear_model import LinearRegression #用于执行线性回归。
from sklearn.metrics import mean_squared_error #用于评估模型性能。# 导入数据
path = 'non-linear-regression-x-y.csv'
data = pd.read_csv(path)# 分离特征和目标变量
X = data['x'].values.reshape(-1, 1)  # 重塑X为二维数组
y = data['y'].values"""
绘制数据散点图
"""
# 绘制散点图
plt.scatter(X, y)
plt.xlabel('X Value')
plt.ylabel('Y Value')
plt.title('Scatter Plot of X vs Y')
plt.show()# 创建多项式特征(例如,二次多项式)
poly = PolynomialFeatures(degree=8)
X_poly = poly.fit_transform(X)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_poly, y, test_size=0.3, random_state=42)# 创建并训练模型
model = LinearRegression()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差: {mse}")# 可选:绘制模型拟合结果
import matplotlib.pyplot as plt
plt.scatter(X, y, color='blue')
plt.plot(X, model.predict(poly.fit_transform(X)), color='red')
plt.title('Non-linear Regression')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

多项式回归的结果如下,本数据集中使用了degree=8(即n=8)均方误差: 107.16818285704927:
在这里插入图片描述

相关文章:

  • CMMI评估认证,引领行业潮流!
  • 如何在社交场合中应对发作性睡病的影响?
  • 学习笔记 -- CAN系统基础
  • 【AI底层逻辑】——“数学华尔兹”之一元线性回归
  • 漏洞复现-iDocview某接口存在任意文件读取漏洞(附漏洞检测脚本)
  • Hasura GraphQL Engine 远程命令执行漏洞复现 [附POC]
  • thinkphp 中 关联查询 like 查询失效
  • C 语言 xml 库的使用
  • 【Go自学版】02-goroutine
  • 解决IDEA配置gitignore不生效
  • Go EASY游戏框架 之 RPC Guide 03
  • 【Mars3d】关于locationBar等控件的css样式冲突处理问题
  • Vue学习笔记-Vue3中的shallowReactive和shallowRef
  • 通过异步序列化提高图表性能 Diagramming for WPF
  • ohpm : 无法将“ohpm”项识别为 cmdlet、函数...
  • 【5+】跨webview多页面 触发事件(二)
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 10个确保微服务与容器安全的最佳实践
  • codis proxy处理流程
  • ES2017异步函数现已正式可用
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • yii2中session跨域名的问题
  • 理清楚Vue的结构
  • 力扣(LeetCode)965
  • 微信开放平台全网发布【失败】的几点排查方法
  • const的用法,特别是用在函数前面与后面的区别
  • !!Dom4j 学习笔记
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #控制台大学课堂点名问题_课堂随机点名
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (六)Hibernate的二级缓存
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • ... 是什么 ?... 有什么用处?
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net framework4与其client profile版本的区别
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .NET与 java通用的3DES加密解密方法
  • :中兴通讯为何成功
  • @Bean注解详解
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • []FET-430SIM508 研究日志 11.3.31
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [20171113]修改表结构删除列相关问题4.txt
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体