多项式回归案例(附数据集下载地址)

数据集下载地址:
链接:https://pan.baidu.com/s/1iWzxK8hlxRHh8pz46576pg 密码:tsu5


当我们完成了数据的预处理环节后,我们可以先对数据进行可视化,根据图像可以初步的判断我们的模型应该是怎么样的,如何更好地拟合,请看下面的例子:
数据集:

Position Level Salary
Business Analyst 1 45000
Junior Consultant 2 50000
Senior Consultant 3 60000
Manager 4 80000
Country Manager 5 110000
Region Manager 6 150000
Partner 7 200000
Senior Partner 8 300000
C-level 9 500000
CEO 10 1000000
#首先还是导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
import statsmodels.formula.api as sm
#加载数据,由于数据样本少,不做分片
dataset = pd.read_csv('Position_Salaries.csv')
# X = dataset.iloc[:,1].values   #shape -- (10,)是个向量,可是我们需要进入训练的变量需要是一个矩阵
X = dataset.iloc[:,1:2].values  #shape -- (10, 1) 矩阵
Y = dataset.iloc[:,2].values  #shape -- (10,)是个向量
#可视化数据
plt.figure(figsize=(10,14))
plt.subplot(211)
plt.scatter(X,Y)
plt.savefig('scatter.png')


数据描点
数据描点完成了,根据图像容易得出一元方程拟合效果不会太好。


一元线性回归
实际也正如我们料想的一致


观察图一,我们可以选用多项式来解决这个回归问题

  1. 对自变量进行矩阵转化,转化为有不同次数的矩阵
# 对X进行多次项处理
Poly = PolynomialFeatures(degree=2)  #参数degree是限定生成的X矩阵的最高次数
X_poly = Poly.fit_transform(X)

输出X_poly结果如下:

#这个操作自动添加了常数项的系数(第一列)第二列是一次项,第二列是二次项
[[  1.   1.   1.]   
 [  1.   2.   4.]
 [  1.   3.   9.]
 [  1.   4.  16.]
 [  1.   5.  25.]
 [  1.   6.  36.]
 [  1.   7.  49.]
 [  1.   8.  64.]
 [  1.   9.  81.]
 [  1.  10. 100.]]
poly_reg = sm.OLS(endog=Y,exog=X_poly).fit()
Y_pre2 = poly_reg.predict(X_poly)
plt.plot(X,poly_reg.predict(X_poly) ,color = 'black',label = 'poly_degree=2')
plt.legend()
plt.savefig('lin&poly.png')


这里写图片描述
显然拟合也不是特别好。可以通过 提高多项式次数来达到更好的拟合度,小心 过度拟合问题

Poly = PolynomialFeatures(degree=3)  #参数degree是限定生成的X矩阵的最高次数
X_poly = Poly.fit_transform(X)
poly_reg = sm.OLS(endog=Y,exog=X_poly).fit()
Y_pre2 = poly_reg.predict(X_poly)
plt.plot(X,poly_reg.predict(X_poly) ,color = 'green',label = 'poly_degree=3')
plt.legend()  #提高到3次基本拟合效果很好了
plt.savefig('lin&poly3.png')


这里写图片描述
提高到3次基本拟合效果很好了


最后对图像进行优化处理,上述图像由于自变量的间距相对较大,图像不够平滑。我们可以有如下操作:

X_grid = np.arange(min(X),max(X),0.1)
X_grid = X_grid.reshape(len(X_grid),1)

plt.plot(X_grid, poly_reg.predict(Poly.fit_transform(X_grid)) ,color = 'green',label = 'poly_degree=3')
plt.legend()


这里写图片描述

回归器信息:


回归器信息

猜你喜欢

转载自blog.csdn.net/weixin_43084928/article/details/82585963