如何正确衡量线性回归模型中变量的重要性
- 背景
- 多重共线性
- 什么是多重共线性
- 为什么多重共线性会导致参数估计失败
- 如何判别多重共线性
- 解决方案
背景
在机器学习任务中,线性回归是常用的一类模型。它其实是一个广义的概念,通常是指用一组自变量来预测因变量,公式如下所示:
线性回归模型往往用于预测任务,例如根据房屋的位置,历史价格,房屋的面积,人口因素等预测未来的房价。除此之外,线性回归模型还可以回答另一方面的问题,那就是,在所有的自变量中,哪些变量最重要,哪些变量无关紧要。例如:在交通领域,我们想找出与交通拥堵有关的最重要的因素,比如天气、道路质量、历史车流量等因素中哪一个最重要,哪一个最不重要。
如下所示,我们可以采用最小二乘法,计算出
然后对进行排序,并依据排序分析其重要程度。
但是,这种貌似可行的方法往往是不合理的,且在实践中往往也是不可行的。例如:当我们预测收入时,它可能会出现学历因素与收入成反比这样违反常理的判断,还会出现一些原本很重要的因素变得很不重要等一系列问题,为什么会出现这些问题呢?我们将如何解决这些问题呢?我们先要了解一个概念,多重共线性。
多重共线性
通俗的讲多重共线性是在线性回归模型中,自变量之间存在高度的相关关系,从而使模型估计失真。我们分一下几个方面来介绍多重共线性:
什么是多重共线性
- 如果存在一组不全为零的数,使得 则称变量之间存在完全共线性,如果还存在随机误差,满足
,使得
则称变量间存在非完全共线性。
一般来讲,完全共线性在实际中基本不会出现。我们面临的往往是一个非完全共线性问题。
为什么多重共线性会导致参数估计失败
当估计回归模型的参数,可得到参数的方差为,为了方便讨论,我们假定
那么,和之间的相关系数为
推理可得
由明显可以看出,当越大。
当参数的方差很大时,尽管参数还是无偏估计,但是它可能会导致回归的参数结果混乱,特别是估计系数的符号可能与预期的恰恰相反。此外,当我们的样本发生变化时,较大的方差也就意味了参数也会随着样本的变化而剧烈变化,从而使自变量的可解释性变差。所以,多重共线性使我们的参数变得不具备可解释性。
如何判别多重共线性
由上式可以看出,多重共线性是由因子决定的,所以,我们可以通过测量这一值得大小来评估多重共线性的严重程度。推广到更一般的情况:
一般来说,当
时,说明变量间存在共线性,当
,说明变量间存在严重的共线性问题。
解决方案
对于回归算法来讲,不论是多元线性回归,逻辑回归,都要同时考虑多个自变量,因此,多重共线性是使用回归算法时经常需要面对的问题,但是,如果问题是一个预测问题,即我们更加关注模型预测的准确率时,一定程度的多重共线性是可以容忍的。
但是,当我们去关注模型的可解释性时,也就是要分析每一个自变量对因变量的影响时,多重共线性阻碍了这种判断,也就宣告了模型是不可解释的。
所以,当我们借助回归模型来分析因子的重要性时,首先要削弱自变量间的多重共线性。通常我们可以采用主成分分析法,逐步回归法等来削弱变量之间的多重共线性。
下面,结合实际案例来介绍采用逐步回归法降低模型的多重共线性,我们采用的数据集是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
发现这一字段的
采用逐步回归法进行分析:
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
得到最后的回归方程为:
对新的回归表达式进行建模并检验其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
此时,通过逐步回归法删除了一些冗余的变量,从而削弱了该模型的多重共线性,使我们的模型更加具备可解释性。