1.多项式回归介绍
在一元回归分析中,如果依变量y与自变量X的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归
多项式回归的最大优点就是可以通过增加X的高次项对实测点进行逼近,直至满意为止。
事实上,多项式回归可以处理相当一类非线性问题,它在回归分析中占有重要的地位,因为任一函数都可以分段用多项式来逼近。
2. 建立工程并导人sklean包
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
sklearn中多项式回归:
这里的多项式回归实际上是先将变量X处理成多项式特征,然后使用线性模型学习多项式特征的参数,以达到多项式回归的目的。
例如: \(X =[x1, x2]\)
1.使用PolynomialFeatures
构造X的二次多项式特征X_Poly
2.使用linear_model学习X_Poly和y之间的映射关系,即参数$$w_{1} x_{1}+w_{2} x_{2}+w_{3} x_{1} x_{2}+w_{4} x_{1}^{2}+w_{5} x_{2}^{2}=y$$
3. 加载训练数据
# 建立datasets_X和datasets_Y用来存储数据中的房屋尺寸和房屋成交价格。
datasets_X = []
datasets_Y =[]
fr = open('prices.txt','r')
lines = fr.readlines()
for line in lines:
items = line.strip().split(',') # 去除数据文件中的逗号
datasets_X.append(int(items[0]))
datasets_Y.append(int(items[1]))
length = len(datasets_X)
datasets_X = np.array(datasets_X).reshape([length,1]) #将dataset_X转化为数组,并变为二维,以符合线性回归拟合函数输人参数要求。
datasets_Y = np.array(datasets_Y)
4. 建立回归方程
# 以数据datasets_X的最大值和最小值为范围,建立等差数列,方便后续画图。
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])
# degree=2表示建立datasets_X的二次多项式特征X_poly.然后创建线性回归,使用线性模型学习X_poly和datasets_Y之间的映射关系(即参数)
poly_reg = PolynomialFeatures(degree = 2)
X_poly = poly_reg.fit_transform(datasets_X)
lin_reg_2 = linear_model.LinearRegression()
lin_reg_2.fit(X_poly, datasets_Y)
PolynomialFeatures的用法:
poly = PolynomialFeatures(degree=2, interaction_only=False, include_bias=True)
-
degree(默认为2):指定多项式的阶数。例如,如果 degree=2,则会生成包括原始特征、其平方项和交互项的多项式特征。如果 degree=3,则还包括立方项。
-
interaction_only(默认为False):如果设置为True,只生成交互项,而不包括原始特征的平方项和高阶项。
假设你有一个包含两个特征的输入特征矩阵 X:[[x1, x2],[y1, y2],[z1, z2]],则:
# degree = 2
[[1, x1, x2, x1^2, x1*x2, x2^2],
[1, y1, y2, y1^2, y1*y2, y2^2],
[1, z1, z2, z1^2, z1*z2, z2^2]]
# 如果 interaction_only=True,则只会生成交互项
[[1, x1*x2],
[1, y1*y2],
[1, z1*z2]]
- include_bias(默认为True):如果设置为True,会添加一个偏置项(截距项)到生成的特征矩阵中,该项的值恒为1。如果设置为False,不会添加偏置项。
fit_transform多项式特征生成器poly
来将原始特征矩阵 X 转换为多项式特征矩阵 X_poly。这将包括原始特征和它们的平方项。
示例:
如果 data 包含原始特征[[1],[2],[3]],那么 degree = 2 的 poly_reg.fit_transform(data) 将包括这些特征及它们的平方项:
[[1. 1. 1.]
[1. 2. 4.]
[1. 3. 9.]]
5. 可视化
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X,lin_reg_2.predict(poly_reg.fit_transform(X)),color ='blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()
6. 预测
y_pred = model.predict(poly.transform(X_test))
它首先将测试数据集 X_test 转换为多项式特征矩阵,然后使用训练好的线性回归模型 model 对多项式特征进行预测,得到预测值 y_pred。
标签:datasets,degree,特征,多项式,回归,poly,Sklearn From: https://www.cnblogs.com/ratillase/p/17810059.html