在机器学习任务中,线性回归是常用的一类模型。它其实是一个广义的概念,通常是指用一组自变量来预测因变量,公式如下所示:
Y = β 0 + β 1 X 1 + ⋯ + β n X n + ϵ Y = \beta_0 + \beta_1X_1+\cdots+\beta_nX_n+ \epsilon Y=β0+β1X1+⋯+βnXn+ϵ
线性回归模型往往用于预测任务,例如根据房屋的位置,历史价格,房屋的面积,人口因素等预测未来的房价。除此之外,线性回归模型还可以回答另一方面的问题,那就是,在所有的自变量中,哪些变量最重要,哪些变量无关紧要。例如:在交通领域,我们想找出与交通拥堵有关的最重要的因素,比如天气、道路质量、历史车流量等因素中哪一个最重要,哪一个最不重要。
如下所示,我们可以采用最小二乘法,计算出 β ^ \hat\beta β^
β ^ = ( β ^ 0 , ⋯   , β ^ n ) T = ( X T Y ) − 1 X T Y \hat\beta = (\hat\beta_0,\cdots,\hat\beta_n)^T = (X^TY) ^{-1}X^TY β^=(β^0,⋯,β^n)T=(XTY)−1XTY
然后对 β ^ \hat\beta β^进行排序,并依据排序分析其重要程度。
但是,这种貌似可行的方法往往是不合理的,且在实践中往往也是不可行的。例如:当我们预测收入时,它可能会出现学历因素与收入成反比这样违反常理的判断,还会出现一些原本很重要的因素变得很不重要等一系列问题,为什么会出现这些问题呢?我们将如何解决这些问题呢?我们先要了解一个概念,多重共线性。
通俗的讲多重共线性是在线性回归模型中,自变量之间存在高度的相关关系,从而使模型估计失真。我们分一下几个方面来介绍多重共线性:
当估计回归模型的参数,可得到参数的方差为 C o v ( β ^ ) = σ 2 ( X T X ) − 1 Cov(\hat\beta) =\sigma^2(X^TX)^{-1} Cov(β^)=σ2(XTX)−1,为了方便讨论,我们假定
y ^ = β ^ 1 x 1 + β ^ 2 x 2 记 L 11 = ∑ i = 1 n x i 1 2 , L 12 = ∑ i = 1 n x i 1 x i 2 , L 22 = ∑ i = 1 n x i 2 2 \hat y=\hat\beta_1 x_1+\hat\beta_2x_2 \\ 记L_{11} = \sum_{i=1}^{n} {x_{i1}^2} , L_{12} = \sum_{i=1}^{n} {x_{i1}x_{i2}},L_{22} = \sum_{i=1}^{n} {x_{i2}^2} y^=β^1x1+β^2x2记L11=i=1∑nxi12,L12=i=1∑nxi1xi2,L22=i=1∑nxi22
那么, x 1 x_1 x1和 x 2 x_2 x2之间的相关系数为 r 12 = L 12 L 11 L 22 r_{12} = \frac{L_{12}}{\sqrt{L_{11}L_{22}}} r12=L11L22L12
推理可得 v a r ( β ^ 1 ) = σ 2 ( 1 − r 12 2 ) L 12 var(\hat\beta_1)=\frac{\sigma^2}{(1-r_{12}^2)L_{12}} var(β^1)=(1−r122)L12σ2
由明显可以看出,当 x 1 , x 2 相 关 性 越 高 , 即 r 12 越 接 近 1 , v a r ( β ^ 1 ) x_1,x_2相关性越高,即r_{12}越接近1,var(\hat\beta_1) x1,x2相关性越高,即r12越接近1,var(β^1)越大。
当参数的方差很大时,尽管参数还是无偏估计,但是它可能会导致回归的参数结果混乱,特别是估计系数的符号可能与预期的恰恰相反。此外,当我们的样本发生变化时,较大的方差也就意味了参数也会随着样本的变化而剧烈变化,从而使自变量的可解释性变差。所以,多重共线性使我们的参数变得不具备可解释性。
由上式可以看出,多重共线性是由因子 1 1 − r 12 2 \frac{1}{1-r_{12}^2} 1−r1221决定的,所以,我们可以通过测量这一值得大小来评估多重共线性的严重程度。推广到更一般的情况:
V I F i = 1 1 − R i 2 其 中 R i 2 = 1 − ∑ i = 1 n ( X i − X ^ i ) 2 ∑ i = 1 n ( X i − E ( X i ) ) 2 , X ^ i = ∑ j = 1 n β j X j 且 j ̸ = i VIF_i=\frac{1}{1-R_i^2} \\ 其中 R_i^2 = 1 - \frac{\sum_{i=1}^{n}(X_i-\hat X_i)^2}{\sum_{i=1}^{n}(X_i- E(X_i))^2},\hat X_i= \sum_{j=1}^{n}\beta_jX_j且 j \not= i VIFi=1−Ri21其中Ri2=1−∑i=1n(Xi−E(Xi))2∑i=1n(Xi−X^i)2,X^i=j=1∑nβjXj且j̸=i
一般来说,当 V I F i > 2 \sqrt{VIF_i}>2 VIFi>2时,说明变量间存在共线性,当 V I F i > 10 VIF_i>10 VIFi>10,说明变量间存在严重的共线性问题。
对于回归算法来讲,不论是多元线性回归,逻辑回归,都要同时考虑多个自变量,因此,多重共线性是使用回归算法时经常需要面对的问题,但是,如果问题是一个预测问题,即我们更加关注模型预测的准确率时,一定程度的多重共线性是可以容忍的。
但是,当我们去关注模型的可解释性时,也就是要分析每一个自变量对因变量的影响时,多重共线性阻碍了这种判断,也就宣告了模型是不可解释的。
所以,当我们借助回归模型来分析因子的重要性时,首先要削弱自变量间的多重共线性。通常我们可以采用主成分分析法,逐步回归法等来削弱变量之间的多重共线性。
下面,结合实际案例来介绍采用逐步回归法降低模型的多重共线性,我们采用的数据集是R语言基础包中的states.x77,它介绍的是一个州的犯罪率和其它因素之间的关系,包括人口、文盲率、平均收入和结霜天数,对其进行建模:
fit <- lm(Murder ~ .,data = as.data.frame(state.x77))
查看它的VIF值:
vif(fit)
Population Income Illiteracy `Life Exp` `HS Grad` Frost Area
1.342691 1.989395 4.135956 1.901430 3.437276 2.373463 1.690625
发现 I l l i t e r a c y Illiteracy Illiteracy这一字段的 V I F I l l i t e r a c y > 2 \sqrt{VIF_{Illiteracy}}>2 VIFIlliteracy>2
采用逐步回归法进行分析:
stepAIC(fit,direction = "both")
Start: AIC=63.01
Murder ~ Population + Income + Illiteracy + `Life Exp` + `HS Grad` +
Frost + Area
Df Sum of Sq RSS AIC
- Income 1 0.236 128.27 61.105
- `HS Grad` 1 0.973 129.01 61.392
128.03 63.013
- Area 1 7.514 135.55 63.865
- Illiteracy 1 8.299 136.33 64.154
- Frost 1 9.260 137.29 64.505
- Population 1 25.719 153.75 70.166
- `Life Exp` 1 127.175 255.21 95.503
Step: AIC=61.11
Murder ~ Population + Illiteracy + `Life Exp` + `HS Grad` + Frost +
Area
Df Sum of Sq RSS AIC
- `HS Grad` 1 0.763 129.03 59.402
128.27 61.105
- Area 1 7.310 135.58 61.877
- Illiteracy 1 8.715 136.98 62.392
- Frost 1 9.345 137.61 62.621
+ Income 1 0.236 128.03 63.013
- Population 1 27.142 155.41 68.702
- `Life Exp` 1 127.500 255.77 93.613
Step: AIC=59.4
Murder ~ Population + Illiteracy + `Life Exp` + Frost + Area
Df Sum of Sq RSS AIC
129.03 59.402
- Illiteracy 1 8.723 137.75 60.672
+ `HS Grad` 1 0.763 128.27 61.105
+ Income 1 0.026 129.01 61.392
- Frost 1 11.030 140.06 61.503
- Area 1 15.937 144.97 63.225
- Population 1 26.415 155.45 66.714
- `Life Exp` 1 140.391 269.42 94.213
Call:
lm(formula = Murder ~ Population + Illiteracy + `Life Exp` +
Frost + Area, data = as.data.frame(state.x77))
Coefficients:
(Intercept) Population Illiteracy `Life Exp` Frost Area
1.202e+02 1.780e-04 1.173e+00 -1.608e+00 -1.373e-02 6.804e-06
得到最后的回归方程为: M u r d e r P o p u l a t i o n + I l l i t e r a c y + ‘ L i f e E x p ‘ + F r o s t + A r e a Murder ~ Population + Illiteracy + `Life Exp` + Frost + Area Murder Population+Illiteracy+‘LifeExp‘+Frost+Area
对新的回归表达式进行建模并检验其VIF值
fit_end <- lm(Murder ~ Population + Illiteracy + `Life Exp` + Frost + Area,data = as.data.frame(state.x77))
Population Illiteracy `Life Exp` Frost Area
1.171232 2.871577 1.625921 2.262943 1.036358
此时,通过逐步回归法删除了一些冗余的变量,从而削弱了该模型的多重共线性,使我们的模型更加具备可解释性。