注:在上一篇的一般线性回归中,使用的假设函数是一元一次方程,也就是二维平面上的一条直线。但是很多时候可能会遇到直线方程无法很好的拟合数据的情况,这个时候可以尝试使用多项式回归。多项式回归中,加入了特征的更高次方(例如平方项或立方项),也相当于增加了模型的自由度,用来捕获数据中非线性的变化。添加高阶项的时候,也增加了模型的复杂度。随着模型复杂度的升高,可以进一步降低训练误差,但导致过拟合的风险也随之增加。
0. 多项式回归的一般形式
在多项式回归中,最重要的参数是最高次方的次数。设最高次方的次数为$n$,且只有一个特征时,其多项式回归的方程为:
$$ \hat{h} = \theta_0 + \theta_1 x^1 + \ ... \ + \theta_{n-1} x^{n-1} + \theta_n x^n $$
如果令$x_0 = 1$,在多样本的情况下,可以写成向量化的形式:
$$\hat{h} = X \cdot \theta$$
其中$X$是大小为$m \cdot (n+1)$的矩阵,$\theta$是大小为$(n+1) \cdot 1$的矩阵。在这里虽然只有一个特征$x$以及$x$的不同次方,但是也可以将$x$的高次方当做一个新特征。与多元回归分析唯一不同的是,这些特征之间是高度相关的,而不是通常要求的那样是相互对立的。
1. 多项式回归的实现
下面主要使用了numpy、scipy、matplotlib和scikit-learn,所有使用到的函数的导入如下:
1 import numpy as np 2 from scipy import stats 3 import matplotlib.pyplot as plt 4 from sklearn.preprocessing import PolynomialFeatures 5 from sklearn.linear_model import LinearRegression 6 from sklearn.metrics import mean_squared_error