介绍
多项式回归是一种回归算法,它假设输入特征和输出变量之间的关系是多项式的。与线性回归只能捕捉到输入特征和输出变量之间的线性关系不同,多项式回归通过引入多项式特征,如$x^2$和$x^3$,来捕捉数据中的非线性关系。这使得多项式回归可以更好地拟合非线性数据。
多项式回归在实际问题中有着广泛的应用。例如,在房价预测中,房价与房屋面积之间的关系可能是非线性的,多项式回归可以通过引入更高次幂的特征来更准确地拟合这种关系。
算法原理
多项式回归的原理很简单,它通过将输入特征的多项式幂添加到线性模型中来建模非线性关系。模型假设可以表示为:
$$
y = w_0 + w_1x + w_2x^2 + w_3x^3 + … + w_dx^d
$$
其中,$y$是输出变量,$x$是输入特征,$d$是多项式的次数,$w_0,w_1,…,w_d$是模型的系数。
为了使用多项式回归,我们需要将输入特征转化为多项式特征,并使用最小二乘法(OLS)来估计模型的系数。最小二乘法通过最小化预测值与实际观测值之间的均方误差来寻找最佳拟合。
公式推导
最小二乘法的目标是最小化平方损失函数:
$$
L(w) = \sum_{i=1}^{n} (y_i – \hat{y_i})^2
$$
其中,$y_i$是第$i$个观测值的真实值,$\hat{y_i}$是相应的预测值。
我们的模型可以表示为:
$$
\hat{y_i} = w_0 + w_1x_i + w_2x_i^2 + w_3x_i^3 + … + w_dx_i^d
$$
为了最小化损失函数,我们需要对系数进行求导,并令导数等于零,求得使损失函数最小化的系数。
计算步骤
多项式回归的计算步骤包括:
1. 准备数据集,包括输入特征$x$和输出变量$y$。
2. 对输入特征$x$进行多项式转换,将其转化为包含多项式幂的特征矩阵$X$。
3. 使用最小二乘法(OLS)估计模型的系数$w$。
4. 使用训练得到的模型进行预测。
Python代码示例
下面是一个使用多项式回归拟合二维非线性数据的Python代码示例:
import numpy as np
import matplotlib.pyplot as plt
# 创建虚拟数据集
np.random.seed(0)
X = np.linspace(-5, 5, 100).reshape(-1, 1)
y = 3 artical cgpt2md_gpt.sh cgpt2md_johngo.log cgpt2md_johngo.sh cgpt2md.sh _content1.txt _content.txt current_url.txt history_url history_urls log nohup.out online pic.txt seo test.py topic_gpt.txt topic_johngo.txt topic.txt upload-markdown-to-wordpress.py urls X**2 - 2 artical cgpt2md_gpt.sh cgpt2md_johngo.log cgpt2md_johngo.sh cgpt2md.sh _content1.txt _content.txt current_url.txt history_url history_urls log nohup.out online pic.txt seo test.py topic_gpt.txt topic_johngo.txt topic.txt upload-markdown-to-wordpress.py urls X + 1 + np.random.normal(0, 1, (100, 1))
# 多项式转换
d = 2 # 多项式次数
X_poly = np.hstack([X**i for i in range(1, d+1)])
# 最小二乘法求解系数
w = np.linalg.inv(X_poly.T.dot(X_poly)).dot(X_poly.T).dot(y)
# 预测
X_new = np.linspace(-5, 5, 100).reshape(-1, 1)
X_new_poly = np.hstack([X_new**i for i in range(1, d+1)])
y_pred = X_new_poly.dot(w)
# 可视化结果
plt.scatter(X, y, label='Actual')
plt.plot(X_new, y_pred, color='r', label='Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
在这个示例中,我们首先生成了虚拟的二维非线性数据集。然后,我们使用多项式转换将输入特征$X$转化为包含平方项的特征矩阵$X_{poly}$。接下来,我们使用最小二乘法求解模型的系数$w$。最后,我们使用训练得到的模型进行预测,并可视化实际观测值和预测值之间的关系。
代码细节解释
- 在代码示例中,我们使用了NumPy库来进行数组操作和线性代数运算。
- 我们使用
np.linspace
生成了等间距的一维数组作为输入特征$X$。 - 为了添加噪声和非线性关系,我们通过将平方项和一维正态分布的随机值相加来生成输出变量$y$。
X_poly
是一个包含多项式幂的特征矩阵,我们使用np.hstack
将平方项添加到原始输入特征$X$中。- 使用最小二乘法,我们可以使用
np.linalg.inv
和.dot
函数计算出系数$w$。 - 在预测阶段,我们可以使用训练得到的系数$w$对新的输入特征进行预测。
- 最后,我们使用Matplotlib库将实际观测值和预测值进行可视化。
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/821888/
转载文章受原作者版权保护。转载请注明原作者出处!