这次我们换个角度,来看看最小二乘法的几何意义。之前,线性回归的数学表达式被写成 $f({\bf x}) = {\bf w} ^ T {\bf x} = \sum_{i = 0}^{n} w_i \cdot x_i$。但在讨论几何意义时,这个表达式要被改写成

f(x)=1⋅β0+∑j=1nxj⋅βj=xTβ

可别小看这个简单的写法变化,从列向量 $\bf x$ 到行向量 ${\bf x} ^ T$ 的改变就像矩阵的左乘和右乘一样具有不同的意义。

当输出被写成 ${\bf w} ^ T {\bf x}$ 时,其背后的寓意是每个包含若干输入属性和一个输出结果的样本都被视为一个整体,误差分散在不同的样本点上;而当输出被写成 ${\bf x} ^ T {\boldsymbol \beta}$ 时,其背后的寓意是每个单独属性在所有样本点上的取值被视为一个整体,误差分散在每个不同的属性上。但横看成岭侧成峰,观察角度的变化不会给观察对象本身造成改变,数据本身是没有变化的。

假设数据集中共有 $N$ 个样本,那么 ${\bf x} ^ T$ 就变成了 $N \times (n + 1)$ 维的数据矩阵 ${\bf X}$,它的每一行表示的都是同一个样本的不同属性,每一列则表示不同样本中的相同属性。如果待拟合数据的特性完美到任意两个属性都线性无关的话,${\bf X}$ 就可以看成一个由它的所有列向量所张成的空间。

一般来说,属性的数目 $n$ 会远远小于数据的数目 $N$,因此 ${\bf X}$ 张成的是 $N$ 维空间之内的n 维生成子空间,或者叫n 维超平面。这个超平面的每一个维度都对应着数据集的一个列向量。理想条件下,输出 ${\bf y}$ 作为属性的线性组合,也应该出现在由数据属性构成的超平面上。但受噪声的影响,真正的 ${\bf y}$ 是超平面之外的一个点,这时就要退而求其次,在超平面上找到离 ${\bf y}$ 最近的点作为最佳的近似。

根据几何知识不难得出,要找的最佳近似 $\hat {\bf y}$ 就是 ${\bf y}$ 在超平面上的投影,而最佳近似所对应的系数 $\hat {\boldsymbol \beta}$ 就是线性回归的解,点 $\hat {\bf y} = {\bf X}{\boldsymbol \beta}$ 和 ${\bf y}$ 之间的距离就是估计误差,也叫残差(residual),它就是最小二乘法最小化的对象,其表达式是 $|| {\bf y} - {\bf X}{\boldsymbol \beta}|| ^ 2$。对参数 $\boldsymbol \beta$ 求导不难得到,能够使均方误差最小化的参数 $\hat {\boldsymbol \beta}$ 应该满足

(y−Xβ^)TX=0

这个式子说明了最小二乘法的几何意义:计算高维空间上的输出结果在由所有属性共同定义的低维空间上的正交投影(orthogonal projection)。投影操作意味着残差不会在数据维度上遗留任何分量,这种基于误差和数据正交性的最优解也经常出现在信号处理当中。

在实际应用中,如何解释线性回归的结果呢?下面这个例子可以说明。

如果爱好足球,你一定不会对数据网站 WhoScored 感到陌生,它的一大特色是会在每场比赛结束后根据球员表现给出评分,0 分最低,10 分最高。虽然这个评分系统能够直观体现谁踢得好谁踢得差,但关于其专业性的质疑却从未停止。那么 WhoScored 的评分到底准不准呢?我们不妨用线性回归做个测试。

如果 WhoScored 的评分足够合理,那球员的评分就应该和球队的成绩呈现出正相关,而线性又是正相关最直接的描述。为了验证球队赛季积分 $y$ 和所有球员的赛季平均评分 $x$ 之间是否存在线性关系,我从网站上复制了 2017~18 赛季英超联赛的相关数据,这个包含 20 个样本的小数据集就是训练集。在拟合数据时,我使用的第三方库是 StatsModels,之所以选择这个库是因为它能够给出更多统计意义上的结论,这些结论对于理解线性回归模型大有裨益。

在模型拟合之前有必要对输入数据做一点处理,那就是将因变量从球队的赛季总积分转换成场均积分。在足球联赛中,一场比赛的胜 / 平 / 负分别对应 3/1/0 分,因此计算场均积分可以看成是某种意义上的归一化,使数据在 [0, 3] 这个一致的较小尺度上得到更加直观的比较。

在使用 StatsModels 拟合模型时,首先要用 add_constant 函数在每个输入数据的后面添加一个 1,借此把常数项纳入模型之中;接下来就可以调用 OLS,也就是普通最小二乘法(ordinary least squares)作为拟合对象,计算线性模型的参数;最后使用 fit 函数获取拟合结果。要查看拟合模型的统计特性,只需打印出模型的 summary。下图就是对英超数据集的拟合结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                            OLS Regression Results                            
==============================================================================
Dep. Variable: Points R-squared: 0.905
Model: OLS Adj. R-squared: 0.900
Method: Least Squares F-statistic: 172.2
Date: Sun, 28 Jul 2019 Prob (F-statistic): 1.18e-10
Time: 22:49:02 Log-Likelihood: 9.3960
No. Observations: 20 AIC: -14.79
Df Residuals: 18 BIC: -12.80
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const -19.4345 1.586 -12.256 0.000 -22.766 -16.103
Ratings 3.0685 0.234 13.123 0.000 2.577 3.560
==============================================================================
Omnibus: 3.586 Durbin-Watson: 2.238
Prob(Omnibus): 0.166 Jarque-Bera (JB): 1.886
Skew: -0.713 Prob(JB): 0.389
Kurtosis: 3.481 Cond. No. 308.
==============================================================================

可以看到,模型拟合最核心的结果显示在第二排:coef 表示的是参数的估计值,也就是通过最小二乘计算出的权重系数。拟合结果告诉我们,球队场均积分 $y$ 和球员平均评分 $x$ 之间的关系可以近似表示为回归式 $y = 3.0685x - 19.4345$,这说明如果所有球员共同努力将平均评分拉高 0.1 的话,球队在每场比赛中就能平均多得 0.306 分。

右侧 std err 表示的是参数估计的标准误(standard error),虽然最小二乘得到的是无偏估计量,意味着估计结果中不存在系统误差,但每一个特定的估计值结果依然会在真实值的附近波动,标准误度量的就是估计值偏离真实值的平均程度。

最后两列 [0.025 0.975] 给出了 95% 置信区间:每个参数真实值落在这个区间内的可能性是 95%。对于线性回归而言,置信下界和上界分别是估计值减去和加上二倍的标准误,也就是 coef$\pm 2 \times$std err。

置信区间告诉我们,平均评分拉高 0.1 并不意味着球队每场一定能多得 0.306 分,但多得的分数基本在 0.258 到 0.356 之间。如果用 2016-17 赛季的数据作为训练数据的话,这个数据的计算结果就变成了 0.33——也落在置信区间之内,这也验证的估计结果的波动性。

中间两列中的 t 和 P>|t|都是统计学中的关键指标,它们评估的是拟合结果的统计学意义。t 代表 $t$ 统计量($t$-statistic),表示了参数的估计值和原始假设值之间的偏离程度。在线性回归中通常会假设待拟合的参数值为 0,此时的 $t$ 统计量就等于估计值除以标准误。当数据中的噪声满足正态分布时,$t$ 统计量就满足 $t$ 分布,其绝对值越大意味着参数等于 0 的可能性越小,拟合的结果也就越可信。

P>|t|表示的则是统计学中争议最大的指标——$p$ 值。$p$ 值($p$-value)是在当原假设为真时,数据等于观测值或比观测值更为极端的概率。简单地说,$p$ 值表示的是数据与一个给定模型不匹配的程度,$p$ 值越小,说明数据和原假设的模型越不匹配,也就和计算出的模型越匹配。在这个例子里,原假设认为待估计的参数等于 0,而接近于 0 的 $p$ 值就意味着计算出的参数值得信任。

看完第二排再来看第一排,也就是对模型拟合数据的程度的评价,重要的指标在右侧一列。R-squared 表示的是 $R ^ 2$ 统计量,也叫作决定系数(coefficient of determination),这个取值在 [0, 1] 之间的数量表示的是输出的变化中能被输入的变化所解释的部分所占的比例。在这个例子里,$R ^ 2 = 0.905$ 意味着回归模型能够通过 $x$ 的变化解释大约 91% 的 $y$ 的变化,这表明回归模型具有良好的准确性,回归后依然不能解释的 9% 就来源于噪声。

$R ^ 2$ 统计量具有单调递增的特性,即使在模型中再添加一些和输出无关的属性,计算出来的 $R ^ 2$ 也不会下降。Adj. R-squared 就是校正版的 $R ^ 2$ 统计量。当模型中增加的变量没有统计学意义时,多余的不相关属性会使校正决定系数下降。校正决定系数体现出的是正则化的思想,它在数值上小于未校正的 $R ^ 2$ 统计量。

1564279682625

上图给出了英超数据集上简单线性回归和多元线性回归的拟合结果,其中蓝点为数据点,红点为预测点。在简单回归中,大部分数据点集中在拟合直线附近,一个明显的异常点是中游球队水晶宫(Crystal Palace)。

回到英超数据集的例子,图形结果和数值指标都表明线性回归能够较好地拟合两者之间的关系,这说明 WhoScored 的评分系统是值得信任的。但这个例子只是线性回归的一个特例,它特殊在输出的因变量只与单个的输入自变量存在线性关系,这种模型被称为简单线性回归(simple linear regression)。更一般的情况是因变量由多个自变量共同决定,对这些自变量同时建模就是多元线性回归(multivariate linear regression)。

与简单线性回归一样,多元线性回归中的参数也要用最小二乘法来估计。还是以积分和评分的关系为例,在简单线性回归中,自变量是所有球员在所有比赛中评分的均值,但是球场上不同位置的球员发挥的作用也不一样。为了进一步分析不同位置球员对球队表现的影响,就要将单个自变量替换成不同位置球员(门将 / 后卫 / 中场 / 前锋)在整个赛季中的平均评分,再使用多元回归进行拟合。

在这个实例中,多元回归的属性,也就是自变量被设置为每队每个位置上出场时间较多的球员的赛季平均评分的均值,所有选中球员的出场时间都在 1000 分钟以上。

利用 OLS 模型可以得到多元回归的结果,可如果对结果加以分析,就会发现一个有趣的现象:一方面,多元模型的校正决定系数是 0.876,意味着所有位置评分共同解释了输出结果的大部分变化,这也可以从预测值与真实值的散点图上观察出来;可另一方面,只有后卫评分和前锋评分的 $p$ 值低于 0.05,似乎球队的战绩只取决于这两个位置的表现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
                            OLS Regression Results                            
==============================================================================
Dep. Variable: Points R-squared: 0.902
Model: OLS Adj. R-squared: 0.876
Method: Least Squares F-statistic: 34.57
Date: Sun, 28 Jul 2019 Prob (F-statistic): 2.09e-07
Time: 22:49:02 Log-Likelihood: 9.0610
No. Observations: 20 AIC: -8.122
Df Residuals: 15 BIC: -3.143
Df Model: 4
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const -15.5306 2.366 -6.563 0.000 -20.574 -10.487
GK -0.2112 0.454 -0.466 0.648 -1.178 0.756
DF 1.5722 0.545 2.885 0.011 0.411 2.734
MF 0.5510 0.354 1.556 0.141 -0.204 1.306
FW 0.5337 0.237 2.249 0.040 0.028 1.040
==============================================================================
Omnibus: 3.397 Durbin-Watson: 1.989
Prob(Omnibus): 0.183 Jarque-Bera (JB): 2.804
Skew: -0.861 Prob(JB): 0.246
Kurtosis: 2.369 Cond. No. 823.
==============================================================================

看起来校正决定系数和 $p$ 值给出了自相矛盾的解释,这时就需要观察另外一个重要的指标:$F$ 统计量

$F$ 统计量($F$-statistic)主要应用在多元回归中,它检验的原假设是所有待估计的参数都等于 0,这意味着只要有一个参数不等于 0,原假设就被推翻。$F$ 统计量越大意味着原假设成立的概率越低,理想的 $F$ 值应该在百千量级。可在上面的多元回归中,$F$ 统计量仅为 34.57,这就支持了 $p$ 值的结论:估计出的参数的统计学意义并不明显。

英超数据集在统计上的非显著性可能源自过小的样本数导致的过拟合,也可能源自不同属性之间的共线性(collinearity)。可在更广泛的意义上,它揭示的却是多元线性回归无法回避的一个本质问题:模型虽然具有足够的精确性,却缺乏关于精确性的合理解释

假定数据共有 10 个属性,如果只保留 10 个属性中的 5 个用于拟合的话,肯定会有不止一个 5 元属性组能够得到彼此接近的优良性能,可对不同 5 元组的解读方式却会大相径庭。

本例的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
import statsmodels.api as sm

os.getcwd()
stats = pd.read_csv('../mlin40-master/regression.csv',sep='\t')
point = stats.iloc[:,4] / 38

rating = stats.iloc[:,5]
positional_rating = stats.iloc[:,[0,1,2,3]]

rating_add = sm.add_constant(rating)
est_simple = sm.OLS(point,rating_add).fit()
print(est_simple.summary())
#
positional_rating_add = sm.add_constant(positional_rating)
est_multi = sm.OLS(point,positional_rating_add).fit()
print(est_multi.summary())
#
fig = plt.figure()
#
ax1 = fig.add_subplot(121)
plt.plot(rating, est_simple.fittedvalues, c="r", linewidth=4)
plt.scatter(rating, point, c="b", s=5)
plt.xlabel("average rating")
plt.ylabel("average point per game")
plt.title("Simple Linear Regression")
#
ax2 = fig.add_subplot(122)
plt.scatter(range(len(point)), est_multi.model.endog, c="b", s=5)
plt.scatter(range(len(point)), est_multi.fittedvalues, c="r", s=5)
plt.title("Multivariate Linear Regression")
#
plt.show()