如何正确衡量线性回归模型中变量的重要性

  1. 背景

在机器学习任务中,线性回归是常用的一类模型。它其实是一个广义的概念,通常是指用一组自变量来预测因变量,公式如下所示:
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,,β^nT=(XTY)1XTY
然后对 β ^ \hat\beta β^进行排序,并依据排序分析其重要程度。
但是,这种貌似可行的方法往往是不合理的,且在实践中往往也是不可行的。例如:当我们预测收入时,它可能会出现学历因素与收入成反比这样违反常理的判断,还会出现一些原本很重要的因素变得很不重要等一系列问题,为什么会出现这些问题呢?我们将如何解决这些问题呢?我们先要了解一个概念,多重共线性。

  1. 多重共线性

通俗的讲多重共线性是在线性回归模型中,自变量之间存在高度的相关关系,从而使模型估计失真。我们分一下几个方面来介绍多重共线性:

  • 什么是多重共线性

    如果存在一组不全为零的数 c 0 , c 1 , c 2 , ⋯   , c n c_0,c_1,c_2,\cdots,c_n c0,c1,c2,,cn,使得 c 0 + c 1 x 1 + c 2 x 2 + ⋯ + c n x n = 0 c_0+c_1x_1+c_2x_2+\cdots+c_nx_n = 0 c0+c1x1+c2x2++cnxn=0
    则称变量之间存在完全共线性,如果还存在随机误差 v v v,满足 E ( v ) = 0 , E ( v 2 ) &lt; ∞ E(v) =0 ,E(v^2) &lt; \infty E(v)=0,E(v2)<,使得
    c 0 + c 1 x 1 + c 2 x 2 + ⋯ + c n x n + v = 0 c_0+c_1x_1+c_2x_2+\cdots+c_nx_n+v = 0 c0+c1x1+c2x2++cnxn+v=0
    则称变量间存在非完全共线性。
    一般来讲,完全共线性在实际中基本不会出现。我们面临的往往是一个非完全共线性问题。
  • 为什么多重共线性会导致参数估计失败

当估计回归模型的参数,可得到参数的方差为 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+β^2x2L11=i=1nxi12,L12=i=1nxi1xi2,L22=i=1nxi22
那么, 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=L11L22 L12
推理可得 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)=(1r122)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,x2r121var(β^1)越大。
当参数的方差很大时,尽管参数还是无偏估计,但是它可能会导致回归的参数结果混乱,特别是估计系数的符号可能与预期的恰恰相反。此外,当我们的样本发生变化时,较大的方差也就意味了参数也会随着样本的变化而剧烈变化,从而使自变量的可解释性变差。所以,多重共线性使我们的参数变得不具备可解释性。

  • 如何判别多重共线性

由上式可以看出,多重共线性是由因子 1 1 − r 12 2 \frac{1}{1-r_{12}^2} 1r1221决定的,所以,我们可以通过测量这一值得大小来评估多重共线性的严重程度。推广到更一般的情况:
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=1Ri21Ri2=1i=1n(XiEXi)2i=1n(XiX^i)2,X^i=j=1nβjXjj̸=i
一般来说,当 V I F i &gt; 2 \sqrt{VIF_i}&gt;2 VIFi >2时,说明变量间存在共线性,当 V I F i &gt; 10 VIF_i&gt;10 VIFi>10,说明变量间存在严重的共线性问题。

  1. 解决方案

对于回归算法来讲,不论是多元线性回归,逻辑回归,都要同时考虑多个自变量,因此,多重共线性是使用回归算法时经常需要面对的问题,但是,如果问题是一个预测问题,即我们更加关注模型预测的准确率时,一定程度的多重共线性是可以容忍的。
但是,当我们去关注模型的可解释性时,也就是要分析每一个自变量对因变量的影响时,多重共线性阻碍了这种判断,也就宣告了模型是不可解释的。
所以,当我们借助回归模型来分析因子的重要性时,首先要削弱自变量间的多重共线性。通常我们可以采用主成分分析法,逐步回归法等来削弱变量之间的多重共线性。
下面,结合实际案例来介绍采用逐步回归法降低模型的多重共线性,我们采用的数据集是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 &gt; 2 \sqrt{VIF_{Illiteracy}}&gt;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
<none>                    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
<none>                    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
<none>                    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 

此时,通过逐步回归法删除了一些冗余的变量,从而削弱了该模型的多重共线性,使我们的模型更加具备可解释性。

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值