线回与非线回---sklearn--多项式回归

Posted lqk0216

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线回与非线回---sklearn--多项式回归相关的知识,希望对你有一定的参考价值。

前言:

有些生活中的问题也许符合一元或多元线性回归的标准,但还有很多问题无法用一条直线来解决,需要使用样式更多更复杂的曲线来说明问题,因此今天我将要解决多项式的问题。

正文:

import numpy as np
import matplotlib.pyplot as plt
#这下面这个是多项式的数据库
from sklearn.preprocessing import PolynomialFeatures
#这个是线性回归模型的数据库
from sklearn.linear_model import LinearRegression
#载入并切分数据,依旧按照你需要的方式取切分
data = np.genfromtxt("job.csv",delimiter = ",")
x_data = data[1:,1]
y_data = data[1:,2]
#画图并展示
plt.scatter(x_data,y_data)
plt.show()

图片展示如下:技术图片
可以看出这个图片属于曲线类型,如果用直线来表示,效果一定不好!

#给你切分好的数据增加维度以符合函数所需要的格式
x_data = x_data[:,np.newaxis]
y_data = y_data[:,np.newaxis]
#创建并拟合线性回归模型
model = LinearRegression()
model.fit(x_data,y_data)
#画图
plt.plot(x_data,y_data,'b.')
plt.plot(x_data,model.predict(x_data),'r')
plt.show()

展示一下直线的效果:
技术图片
可以发现直线的效果很差,完全达不到预期的标准
因此我们需要换一种方式来做

#建立多项式回归模型
#polynomialfeatures可以给你的数据提供更高次的项
#具体用法百度直接搜索
#degree的值由你自己决定,不要太高也不要太低
poly_reg = PolynomialFeatures(degree=3)
#特征处理,fit来适配数据,transform来自动处理数据
x_poly = poly_reg.fit_transform(x_data)
#定义回归模型
lin_reg = LinearRegression()
#把处理好的x_poly带入fit函数中
#训练模型
lin_reg.fit(x_poly,y_data)
#画图
plt.plot(x_data,y_data,'b.')
#在1~10范围内生成20个点
x_test = np.linspace(1,10,20)
#给x_test增加维度
x_test = x_test[:,np.newaxis]
#将数据带入fit_transform中,并画出来
plt.plot(x_test,lin_reg.predict(poly_reg.fit_transform(x_test)),'r')
plt.show()

图片展示如下:
技术图片

总结:

可以看出多项式回归确实比一元形象多了!

以上是关于线回与非线回---sklearn--多项式回归的主要内容,如果未能解决你的问题,请参考以下文章

❤️解决非线性回归问题的机器学习方法总结:多项式线性模型广义线性(GAM)模型回归树模型支持向量回归(SVR)模型

❤️解决非线性回归问题的机器学习方法总结:多项式线性模型广义线性(GAM)模型回归树模型支持向量回归(SVR)模型

多项式回归原理及在sklearn中的使用+pipeline

机器学习多项式回归原理介绍

如何用 Python 和 sklearn 编写多元对数回归?

[机器学习与scikit-learn-21]:算法-逻辑回归-多项式非线性回归PolynomialFeatures与代码实现