📜  非线性数据的多项式回归 - ML(1)

📅  最后修改于: 2023-12-03 15:42:26.435000             🧑  作者: Mango

非线性数据的多项式回归 - ML

在机器学习中,许多数据集都没有线性关系。这时我们需要使用多项式回归(polynomial regression)来建立一个多项式模型来预测因变量的值。

多项式回归

多项式回归是一种回归分析方法,可以拟合可曲线形状的数据。与线性回归类似,多项式回归模型也是通过拟合优度最好的多项式曲线(而不是一条直线)来逼近多元函数的关系。多项式回归的公式如下:

$y = \beta_0 + \beta_1 x + \beta_2 x^2 + \beta_3 x^3 + \cdots + \beta_n x^n + \epsilon$

其中,$y$ 是因变量,$x$ 是自变量,$\beta_n$ 是权重系数,$n$ 是多项式的次数,$\epsilon$ 是随机误差。

实现多项式回归

在 Python 中,我们可以使用 scikit-learn 库来实现多项式回归。下面是一个例子:

# 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 生成非线性数据
x = np.linspace(0, 10, 100)
y = np.sin(x) + np.random.normal(0, 0.1, 100)

# 将 x 转化为二维数组
X = x[:, np.newaxis]

# 生成二次、三次和四次多项式特征
poly2 = PolynomialFeatures(degree=2)
X_poly2 = poly2.fit_transform(X)

poly3 = PolynomialFeatures(degree=3)
X_poly3 = poly3.fit_transform(X)

poly4 = PolynomialFeatures(degree=4)
X_poly4 = poly4.fit_transform(X)

# 拟合二次、三次和四次多项式模型
linear_reg2 = LinearRegression()
linear_reg2.fit(X_poly2, y)

linear_reg3 = LinearRegression()
linear_reg3.fit(X_poly3, y)

linear_reg4 = LinearRegression()
linear_reg4.fit(X_poly4, y)

# 绘制数据点和三个模型的拟合曲线
plt.scatter(x, y, s=10)

plt.plot(X, linear_reg2.predict(X_poly2), color='red')
plt.plot(X, linear_reg3.predict(X_poly3), color='green')
plt.plot(X, linear_reg4.predict(X_poly4), color='yellow')

plt.show()

这段代码首先生成一个非线性的带有噪声的数据集,然后使用 PolynomialFeatures 类将一维的自变量 $X$ 转化为二、三、四次多项式的特征矩阵。接下来,我们用 LinearRegression 类拟合三个模型,最后绘制数据点和三个模型的拟合曲线。

过拟合和欠拟合

多项式回归模型的次数对拟合效果有很大的影响,一般来说,模型次数越高,拟合效果越好,但增加次数同时也增加了模型的复杂度,容易造成过拟合现象。为了避免过拟合,我们需要使用交叉验证(cross-validation)和正则化(regularization)等技术来调整模型。此外,欠拟合也是一个问题,欠拟合意味着模型过于简单,不能很好地拟合真实数据的特征。

总结

多项式回归是一种可以拟合非线性数据的回归模型,通过增加多项式的次数来逼近真实数据的关系。但过高的模型复杂度容易造成过拟合,需要使用正则化等技术来缓解。