Polynomial(Linear) Regression 多项式线性回归

介绍:

多项式线性回归是一种线性回归的扩展,它允许我们在模型中使用多项式函数来拟合数据。

线性回归模型假设因变量与自变量之间存在线性关系,即通过一个直线来拟合数据。但是,在某些情况下,数据可能不适合使用直线来拟合,可能需要更复杂的模型。

多项式线性回归就是一种通过多项式函数来拟合数据的方法。它通过引入多项式的高次项来增加模型的复杂度,使其能够更好地拟合非线性的数据。

多项式线性回归模型的一般形式为: y = b0 + b1x + b2x^2 + ... + bn*x^n

其中,y是因变量,x是自变量,b0、b1、...、bn是回归系数,n是多项式的阶数。

多项式线性回归的步骤与普通线性回归相似。首先,需要收集训练数据。然后,选择适当的多项式阶数,并使用最小二乘法或其他方法拟合多项式线性回归模型。最后,可以使用模型进行预测和分析。

多项式线性回归的优点是可以适用于非线性数据,并且具有较强的拟合能力。然而,它也存在一些问题,如过拟合和高次项的数量选择问题。因此,在应用多项式线性回归模型时,需要注意选择合适的模型复杂度,并进行模型评估和调整。

总之,多项式线性回归是一种扩展了线性回归模型的方法,通过引入多项式函数来拟合非线性数据。它是一个强大的工具,可以在多种实际问题中使用。

可以参考一元线性回归:Linear Regression线性回归(一元、多元)-CSDN博客

一、数据处理

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv('Salary_dataset.csv')
'''结果:Unnamed: 0 	YearsExperience 	Salary
0 	0 	1.2 	39344
1 	1 	1.4 	46206
2 	2 	1.6 	37732
3 	3 	2.1 	43526
4 	4 	2.3 	39892
5 	5 	3.0 	56643
6 	6 	3.1 	60151
7 	7 	3.3 	54446
8 	8 	3.3 	64446
9 	9 	3.8 	57190
10 	10 	4.0 	63219
11 	11 	4.1 	55795
12 	12 	4.1 	56958
13 	13 	4.2 	57082
14 	14 	4.6 	61112
15 	15 	5.0 	67939
16 	16 	5.2 	66030
17 	17 	5.4 	83089
18 	18 	6.0 	81364
19 	19 	6.1 	93941
20 	20 	6.9 	91739
21 	21 	7.2 	98274
22 	22 	8.0 	101303
23 	23 	8.3 	113813
24 	24 	8.8 	109432
25 	25 	9.1 	105583
26 	26 	9.6 	116970
27 	27 	9.7 	112636
28 	28 	10.4 	122392
29 	29 	10.6 	121873
'''X=data.iloc[:,1:2].values#自变量
y=data.iloc[:,-1].values#因变量
'''结果:
X  array([[ 1.2],[ 1.4],[ 1.6],[ 2.1],[ 2.3],[ 3. ],[ 3.1],[ 3.3],[ 3.3],[ 3.8],[ 4. ],[ 4.1],[ 4.1],[ 4.2],[ 4.6],[ 5. ],[ 5.2],[ 5.4],[ 6. ],[ 6.1],[ 6.9],[ 7.2],[ 8. ],[ 8.3],[ 8.8],[ 9.1],[ 9.6],[ 9.7],[10.4],[10.6]])y  array([ 39344,  46206,  37732,  43526,  39892,  56643,  60151,  54446,64446,  57190,  63219,  55795,  56958,  57082,  61112,  67939,66030,  83089,  81364,  93941,  91739,  98274, 101303, 113813,109432, 105583, 116970, 112636, 122392, 121873], dtype=int64)
'''

 二、数据分为训练集和测试集

from  sklearn.model_selection import train_test_split#将数据分成测试和训练集
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)#测试集占百分之二十,random_state=0随机抽取数据集里的成为测试集
X_train.shape
#结果:(24, 1)
X_test.shape
#结果:(6, 1)

 三、建模

3.1一元线性回归

from sklearn.linear_model import LinearRegression
LinReg=LinearRegression()#是个类
LinReg.fit(X_train,y_train)#训练集给到这个模型
y_predict=LinReg.predict(X_test)#测试集的预测值
from sklearn.metrics import r2_score
score1=r2_score(y_test,y_predict)#测试集值和预测值进行评估
#结果:0.988169515729126plt.scatter(X_train,y_train,color='green')#训练集的点
plt.plot(X_test,LinReg.predict(X_test),color='blue')#测试集的线
plt.plot(X_train,LinReg.predict(X_train),color='red')#训练集的线
plt.title('Linear Regressin')
plt.xlabel('YearsExperience')
plt.ylabel('Salary')

3.2 多项式线性回归

from sklearn.preprocessing import PolynomialFeatures
polynom = PolynomialFeatures(degree=2)#到几次方,0,1,2次方,可以经过调参调整模型的值
X_polynom=polynom.fit_transform(X_train)#拟合数据,转化为标准形式
'''结果:
array([[  1.  ,   9.7 ,  94.09],[  1.  ,   4.1 ,  16.81],[  1.  ,   5.4 ,  29.16],[  1.  ,   8.  ,  64.  ],[  1.  ,   3.  ,   9.  ],[  1.  ,   5.2 ,  27.04],[  1.  ,   3.3 ,  10.89],[  1.  ,   4.6 ,  21.16],[  1.  ,   8.3 ,  68.89],[  1.  ,   6.9 ,  47.61],[  1.  ,   1.4 ,   1.96],[  1.  ,  10.6 , 112.36],[  1.  ,   3.1 ,   9.61],[  1.  ,   2.3 ,   5.29],[  1.  ,   6.  ,  36.  ],[  1.  ,   6.1 ,  37.21],[  1.  ,   3.8 ,  14.44],[  1.  ,   3.3 ,  10.89],[  1.  ,   9.1 ,  82.81],[  1.  ,   2.1 ,   4.41],[  1.  ,   1.2 ,   1.44],[  1.  ,   7.2 ,  51.84],[  1.  ,   5.  ,  25.  ],[  1.  ,   4.1 ,  16.81]])
'''PolyReg= LinearRegression()
PolyReg.fit(X_polynom,y_train)#训练集赋给线性回归函数plt.scatter(X_train,y_train,color='green')#训练集的点
plt.plot(X_test,PolyReg.predict(polynom.fit_transform(X_test)),color='blue')#测试集的线
#plt.plot(X_train,PolyReg.predict(polynom.fit_transform(X_train)),color='red')#训练集的线
plt.title('Linear Regressin')
plt.xlabel('YearsExperience')
plt.ylabel('Salary')y_predict_pr=PolyReg.predict(polynom.fit_transform(X_test))
r_square = metrics.r2_score(y_test,y_predict_pr)
r_square
#结果:0.9882197351491804

 3.3对比一元线性回归和多项式回归的模型值

y_predict_slr = LinReg.predict(X_test)
from sklearn import metrics
r_square = metrics.r2_score(y_test,y_predict_slr)
r_square
#一元线性回归:0.988169515729126y_predict_pr=PolyReg.predict(polynom.fit_transform(X_test))
r_square = metrics.r2_score(y_test,y_predict_pr)
r_square
#多项式线性回归:0.9882197351491804#多项式线性回归模型的值优与一元线性回归

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

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

相关文章

03 使用Vite开发Vue3项目

概述 要使用vite创建Vue3项目,有很多种方式,如果使用命令,则推荐如下命令: # 使用nvm将nodejs的版本切换到20 nvm use 20# 全局安装yarn npm install -g yarn# 使用yarnvite创建项目 yarn create vite不过,笔者更推荐…

2024年软件测试入坑指南,新人必看系列

本科非计算机专业,在深圳做了四年软件测试工作,从之前的一脸懵的点点点,到现在会点自动化测试,说一点点非计算机专业人员从事软件测试的心得体会,仅供参考交流。 如果你是非计算机专业,毕业不久&#xff0…

排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序

排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序 文章目录 排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序前言:冒泡排序插入排序希尔排序选择排序堆排序快速排序--交换排序三数取中快速排序hoare版本快速排序挖坑法快速排序前后指…

lambda自定义比较规则-sort函数或优先队列

Lambda表达式的一般形式为 [captures](params){body}对于优先队列的自定义排序规则&#xff0c;常见方法是写成结构体形式 struct cmp{bool operator()(pair<int,int> map1,pair<int,int> map2){return map1.second>map2.second;} }; priority_queue<pair&…

【FPGA】电梯楼层显示(简易)

前言 这是作者室友的项目&#xff0c;本来不管作者事儿的&#xff0c;但是后来听到说是室友去网上找人花了80块买了个劣质的&#xff0c;不仅是从CSDN上抄的&#xff0c;而且使用的板子还不符合室友的要求。可叹作者心软啊&#xff0c;顺便给室友做了。 在代码实现部分会给出设…

【FPGA】Verilog 实践:MUX 多路复用器 | Multiplexer | 实现 4 到 1 线路多路复用器

0x00 MUX 多路复用器(Multiplexer) 多路复用器 (Multiplexer,简称 MUX) 是一种电路,用于从多个输入中选择一个特定输入。它为 个输入提供一个输出,并有 个 select single,作用是从多个输入中选择一个。 多路复用器有两个主要部分:选择器和数据线。选择器用于选择输入…

计算机毕业设计 基于SpringBoot的大学生创新创业项目管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

A01、关于JVM的GC回收

引用类型 对象引用类型分为强引用、软引用、弱引用&#xff0c;具体差别详见下文描述&#xff1a; 强引用&#xff1a;就是我们一般声明对象是时虚拟机生成的引用&#xff0c;强引用环境下&#xff0c;垃圾回收时需要严格判断当前对象是否被强引用&#xff0c;如果被强引用&am…

java-sec-code的xss

java-sec-code 用于学习java漏洞代码 环境部署 直接在idea中使用git 运行即可 RequestMapping("/reflect") ResponseBody public static String reflect(String xss) {return xss;}当用户访问到/reflect URL地址时&#xff0c;程序会自动调用reflect方法&#xff0c…

计网02-计算机网络参考模型

一、OSI七层参考模型 1、分层的思想 分层模型用于网络协议的设计方法&#xff0c;本质是将网络节点间复杂的通信问题分成若干简单的问题逐一解决&#xff0c;通过网络的层次去找问题&#xff0c;将复杂问题简单化。 2、OSI参考模型 由于早期计算机厂商使用的是私有的网络模…

【C++】POCO学习总结(十九):哈希、URL、UUID、配置文件、日志配置、动态库加载

【C】郭老二博文之&#xff1a;C目录 1、哈希 1.1 说明 std::map和std::set 的性能是&#xff1a;O(log n) POCO哈希的性能比STL容器更好&#xff0c;大约快两&#xff1b; POCO中对应std::map的是&#xff1a;Poco::HashMap&#xff1b; POCO中对应std::set的是 Poco::Hash…

详解—【C++】lambda表达式

目录 前言 一、lambda表达式 二、lambda表达式语法 2.1. lambda表达式各部分说明 2.2. 捕获列表说明 三、函数对象与lambda表达式 前言 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #i…