📜  机器学习-多项式回归(1)

📅  最后修改于: 2023-12-03 14:55:27.303000             🧑  作者: Mango

机器学习-多项式回归

简介

多项式回归(Polynomial Regression)是一种线性回归的扩展形式,它的主要思想是将自变量的高次项也加入到模型中,通过拟合多项式函数来逼近真实的数据规律。在实际问题中,很多数据都不是线性的,如果仅仅使用一条直线来拟合数据的话肯定是不行的。这时候我们就可以使用多项式回归,通过拟合一个多项式函数来更好地逼近数据的规律。

实现原理

多项式回归的实现原理比较简单,我们只需要将自变量的高次项添加到模型中即可。具体来说,如果我们将原本的特征 $x$ 再次按照次数提取特征,比如若原本的特征是 $x$,那么我们就将 $x$ 的 1 次方、2 次方、3 次方、...、n 次方依次作为新的特征,得到新的特征向量为:$[1,x,x^2,x^3,...,x^n]$。然后就可以使用线性回归等模型来拟合这些特征了。

下面是多项式回归的标准公式:

$$ y=b_0+b_1x_1+b_2{x_2}^2+...+b_n{x_n}^n $$

其中,$x_i$ 表示特征矩阵对应的第 $i$ 个特征,$b_i$ 表示对应的系数。

代码实现

在实现上,我们可以使用 Python 的 sklearn.preprocessing.PolynomialFeatures 类来自动生成多项式特征。基本 API 如下:

from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=n)   # n 表示最高次数
X_poly = poly.fit_transform(X)    # 生成多项式特征,返回值为拓展后的特征矩阵

如果你已经将数据集分成训练集和测试集了,则可以像下面这样分别生成训练集和测试集的多项式特征:

from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=n)   # n 表示最高次数
X_poly_train = poly.fit_transform(X_train)    # 生成训练集的多项式特征
X_poly_test = poly.transform(X_test)    # 生成测试集的多项式特征

在得到拓展后的特征矩阵后,我们就可以使用 sklearn.linear_model.LinearRegression 类等线性回归模型来拟合数据了。具体实现可以参考下面的代码片段:

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=n)
X_poly_train = poly.fit_transform(X_train)    # 生成训练集的多项式特征
X_poly_test = poly.transform(X_test)    # 生成测试集的多项式特征

model = LinearRegression()
model.fit(X_poly_train, y_train)    # 训练模型

y_pred_train = model.predict(X_poly_train)    # 在训练集上进行预测
y_pred_test = model.predict(X_poly_test)    # 在测试集上进行预测

# 计算模型的评价指标(比如均方误差等)
score_train = model.score(X_poly_train, y_train)
score_test = model.score(X_poly_test, y_test)
总结

多项式回归是一种有效的非线性回归方法,可以处理多项式形式的数据。在实现上,我们需要使用 sklearn.preprocessing.PolynomialFeatures 类来生成多项式特征,然后使用线性回归等模型来拟合数据。本文提供了一份实现多项式回归的代码片段,供大家参考和借鉴。