多项式回归是一种回归分析方法,用于建立因变量(目标)和自变量(特征)之间的关系。与线性回归不同,多项式回归假设这种关系不是线性的,而是一个多项式函数。多项式回归的一般形式如下:
其中:
多项式回归的关键之处在于它允许我们通过增加多项式的阶数(nn)来适应不同程度的非线性关系。
多项式回归在许多领域都有广泛的应用,包括但不限于以下几个方面:
首先我们可以先创建一个曲线,先看看 这里我们先导入需要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
之后我们创建一个曲线并绘制
x = np.random.uniform(-3,3,size=100)
X = x.reshape(-1,1)
y = 0.5*x**2+x+3+np.random.normal(0,1,size=100)
plt.scatter(X,y)
plt.show()
运行结果如下
接下来我们使用线性回归进行拟合
X_train,X_test,y_train,y_test = train_test_split(X,y)
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
y_predict = lin_reg.predict(X)
接下来我们看看具体得分是多少
结果显而易见差的一批
再来看看它的均方误差
结果也是比较大的,最后我们来看一眼绘制好的直线
接下来我们在原来数据集的基础上,增加y一列特征,得到新的样本集X2,依然套用线性回归的模型
X2 = np.hstack([X**2,X])
1
再得出均方误差就小了许多
再来看看绘制后的图像
再来看看系数和截距,还是比较准确的
首先还是导入库
from sklearn.preprocessing import PolynomialFeatures
之后我们要去创建一个多项式特征生成器对象ploy
poly = PolynomialFeatures(degree=2)
poly.fit(X)
X_poly = poly.transform(X)
当然我们也可以看看具体的数据,这样方便观察
X_poly[:3,:]
运行结果如下
注意:进行多项式计算以后,得到的数据集需要做数据的归一化
进行多项式计算后,得到的数据集通常需要进行数据归一化或标准化,主要有以下几个原因:
导入库
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
创建管道对象,根据先后顺序对数据进行多项式处理,归一化处理和线性回归训练处理
poly_reg = Pipeline([
('poly',PolynomialFeatures(degree=2)),
('std_scaler',StandardScaler()),
('lin_reg',LinearRegression())
])
最后进行实现
x = np.random.uniform(-3,3,size=100)
X = x.reshape(-1,1)
y = 0.5*x**2+x+3+np.random.normal(0,1,size=100)
X_train,X_test,y_train,y_test = train_test_split(X,y)
poly_reg.fit(X_train,y_train)
y_predict = poly_reg.predict(X)
plt.scatter(X,y)
plt.plot(np.sort(x),y_predict[np.argsort(x)],color='r')
plt.show()
运行结果如下
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。