关于sklearn 编写多项式方程

之前写过一次关于多次函数的代码,同样使用sklearn库,数据如图所示:

关于sklearn 编写多项式方程_第1张图片

先画出散点图:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
#设置中文显示
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
 
data=np.genfromtxt("C:/Users/Lenovo/Desktop/shuzizuoye/job.csv",delimiter=",")
x = data[1:, 1]
y = data[1:, 2]#y取第二列数据
plt.scatter(x, y,)#画出数据散点图
plt.show
data = np.array(data)

 关于sklearn 编写多项式方程_第2张图片

根据这个散点图可以看出这里使用一次函数会产生很大的误差,需要高次函数。

x=x[:,np.newaxis]
y=y[:,np.newaxis]

 这里是将x,y数据变成二维的数据格式,因为后面model.fit(x1,y)需要数据是二维的。

# 用于增加一个多次项内容的模块PolynomialFeatures
from sklearn.preprocessing import PolynomialFeatures

poly_reg = PolynomialFeatures(degree=6)

x1= poly_reg.fit_transform(x)
model = LinearRegression()
model.fit(x1,y)

plt.scatter(x,y)

plt.plot(x,model.predict(x1),color='r')
plt.show()
 
model.coef_,model.intercept_

这次采用的最高次数为6.

关于sklearn 编写多项式方程_第3张图片

画出图像,可以看出这里基本拟合。现在对拟合的精度进行检验。

import statsmodels.api as sm
 
# add_constant()函数给原来的特征变量X添加常数项,并赋给X2,这样才有y=ax+b中的常数项,即截距b
X2 = sm.add_constant(x1)
# 用OLS()和fit()函数对Y和X2进行线性回归方程搭建
est = sm.OLS(y,x1).fit()
est.summary()

 关于sklearn 编写多项式方程_第4张图片

可以看出R-squrared与adj.R-squrared均为1说明拟合的效果很高。 

你可能感兴趣的:(sklearn,python,机器学习)