LASSO何时选择相关的预测因子?


13

我在R中使用带有以下代码的软件包“ lars”:

> library(lars)
> set.seed(3)
> n <- 1000
> x1 <- rnorm(n)
> x2 <- x1+rnorm(n)*0.5
> x3 <- rnorm(n)
> x4 <- rnorm(n)
> x5 <- rexp(n)
> y <- 5*x1 + 4*x2 + 2*x3 + 7*x4 + rnorm(n)
> x <- cbind(x1,x2,x3,x4,x5)
> cor(cbind(y,x))
            y          x1           x2           x3          x4          x5
y  1.00000000  0.74678534  0.743536093  0.210757777  0.59218321  0.03943133
x1 0.74678534  1.00000000  0.892113559  0.015302566 -0.03040464  0.04952222
x2 0.74353609  0.89211356  1.000000000 -0.003146131 -0.02172854  0.05703270
x3 0.21075778  0.01530257 -0.003146131  1.000000000  0.05437726  0.01449142
x4 0.59218321 -0.03040464 -0.021728535  0.054377256  1.00000000 -0.02166716
x5 0.03943133  0.04952222  0.057032700  0.014491422 -0.02166716  1.00000000
> m <- lars(x,y,"step",trace=T)
Forward Stepwise sequence
Computing X'X .....
LARS Step 1 :    Variable 1     added
LARS Step 2 :    Variable 4     added
LARS Step 3 :    Variable 3     added
LARS Step 4 :    Variable 2     added
LARS Step 5 :    Variable 5     added
Computing residuals, RSS etc .....

我有一个包含5个连续变量的数据集,我正在尝试将模型拟合为单个(因变量)y。我的两个预测变量彼​​此高度相关(x1,x2)。

如上例所示,带有“ stepwise”选项的lars函数首先选择与y最相关的变量。进入模型的下一个变量是与残差最相关的变量。确实是x4:

> round((cor(cbind(resid(lm(y~x1)),x))[1,3:6]),4)
    x2     x3     x4     x5 
0.1163 0.2997 0.9246 0.0037  

现在,如果我执行“套索”选项:

> m <- lars(x,y,"lasso",trace=T)
LASSO sequence
Computing X'X ....
LARS Step 1 :    Variable 1     added
LARS Step 2 :    Variable 2     added
LARS Step 3 :    Variable 4     added
LARS Step 4 :    Variable 3     added
LARS Step 5 :    Variable 5     added

它在前两个步骤中将两个相关变量都添加到模型中。这与我在几篇论文中所读的相反。然后大多数人说,如果存在一组变量之间的相关性非常高,则“套索”倾向于从该组中随机选择一个变量。

有人可以提供这种行为的例子吗?或解释一下,为什么将我的变量x1,x2依次(一起)添加到模型中?


这是最小角度回归,它给出了套索步骤的解释。
Michael R. Chernick 2012年

@MichaelChernick:如果查看ROP正在发出的呼叫以及他提供的相关输出,您会发现他确实在使用套索。如您所知,您可以对lars算法进行一些细微调整,从而得出套索正则化路径。
主教

我的猜测是,由于x2包含x1的4个单位,因此x1和x2的组合实际上具有最大的方差(9个单位)。如果将x2的系数降低到2,则应该看到在x1和x2之前选择了x4。

您可以提供一些证明来证明“随机性”吗?谢谢。

我想您可以在本文上找到答案:arxiv.org/pdf/1204.1605.pdf
TPArrow 2014年

Answers:


15

共线性问题被高估了!

托马斯(Thomas),您表达了一个共同的观点,即如果预测变量相互关联,那么即使最好的变量选择技术也只能从中随机选择一个。幸运的是,这就是强调回归发现真相的能力!如果您具有正确类型的解释变量(外部变量),则多元回归有望发现每个变量保持其他变量不变的效果。现在,如果变量完全相关,那么这实际上是不可能的。如果变量是相关的,则可能会更难,但是根据当今典型数据集的大小,它并没有那么难。

共线性是一个信息少的问题。戴夫·吉尔斯(Dave Giles)的博客上,看看Art Goldberger对这种共线性的模仿。如果将均线性应用于平均值而不是部分回归系数,那么我们谈论共线性的方法听起来会很愚蠢。

还是不服气?现在是时候编写一些代码了。

set.seed(34234)

N <- 1000
x1 <- rnorm(N)
x2 <- 2*x1 + .7 * rnorm(N)
cor(x1, x2) # correlation is .94
plot(x2 ~ x1)

我已经创建了高度相关的变量x1和x2,但是您可以在下图中看到,当x1接近-1时,我们仍然看到x2的可变性。 在此处输入图片说明

现在是时候添加“真相”了:

y <- .5 * x1 - .7 * x2 + rnorm(N) # Data Generating Process

在强大的共线性问题中,普通回归能否成功?

summary(lm(y ~ x1 + x2))

哦,是的,它可以:

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.0005334  0.0312637  -0.017    0.986    
x1           0.6376689  0.0927472   6.875 1.09e-11 ***
x2          -0.7530805  0.0444443 -16.944  < 2e-16 ***

现在我没有谈论您关注的LASSO。但是,让我问你这个。如果带有后向消除功能的老式回归方法不会被共线性所迷惑,那么您为什么会认为最先进的LASSO会呢?


到最后一点,虽然OLS是旋转等变的,但由于范数,我不希望LASSO具有相同的属性。LASSO是否花哨可能不重要。L1
steveo'america

想法是,可以使用更简单的概念来解释OP所描述的现象,并且通过添加数据驱动的正则化术语不会从根本上改变这些概念。
本·奥戈里克

7

Ben的回答激发了我向他提供的道路迈进了一步,如果“真相” y在其他情况下会发生什么。

在原始示例中,y取决于两个高度相关的变量x1和x2。假设还有另一个变量x3

x3 = c(1:N)/ 250#N之前已定义,N = 1000,x3与x1具有相似的标度,并且x3的标度对下面的线性回归结果有影响。

现在将“真” y定义如下

y = .5 * x1-.7 * x3 + rnorm(N)#数据生成过程

回归将发生什么?

摘要(lm(y〜x1 + x2))

存在很强的共线性效应。x2的标准误差太大。但是,线性回归将x2标识为非有效变量。

     Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.39164    0.04172 -33.354  < 2e-16 ***
x1           0.65329    0.12550   5.205 2.35e-07 ***
x2          -0.07878    0.05848  -1.347    0.178 

vif(lm(y〜x1 + x2))

x1       x2 
9.167429 9.167429 

那另一个回归案例呢?

摘要(lm(y〜x1 + x2 + x3))

Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.02100    0.06573   0.319    0.749    
x1           0.55398    0.09880   5.607 2.67e-08 ***
x2          -0.02966    0.04604  -0.644    0.520    
x3          -0.70562    0.02845 -24.805  < 2e-16 ***

变量x2不重要,建议通过线性回归将其删除。

vif(lm(y〜x1 + x2 + x3))

x1       x2       x3 
9.067865 9.067884 1.000105 

根据以上结果,共线性不是线性回归中的问题,并且检查VIF并不是很有帮助。

让我们看看另一种情况。x3 = c(1:N)#N之前已定义,N = 1000,x3与x1的比例不同。

“真” y的定义与上面相同

y = .5 * x1-.7 * x3 + rnorm(N)#数据生成过程

回归将发生什么?

摘要(lm(y〜x1 + x2))

存在很强的共线性效应。x1,x2的标准误差太大。线性回归无法确定重要变量x1。

   Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -350.347      6.395 -54.783   <2e-16 ***
x1            25.207     19.237   1.310    0.190    
x2           -12.212      8.963  -1.362    0.173  

vif(lm(y〜x1 + x2))

    x1       x2 
9.167429 9.167429 

那另一个回归案例呢?

摘要(lm(y〜x1 + x2 + x3))

Coefficients:
          Estimate Std. Error   t value Pr(>|t|)    
(Intercept)  0.0360104  0.0610405     0.590    0.555    
x1           0.5742955  0.0917555     6.259 5.75e-10 ***
x2          -0.0277623  0.0427585    -0.649    0.516    
x3          -0.7000676  0.0001057 -6625.170  < 2e-16 ***

变量x2不重要,建议通过线性回归将其删除。

vif(lm(y〜x1 + x2 + x3))

x1       x2       x3 
9.182507 9.184419 1.001853 

注意:y在x1和x3上的回归。请注意,x1的标准误差仅为0.03。

摘要(lm(y〜x1 + x3))

Coefficients:
              Estimate Std. Error   t value Pr(>|t|)    
(Intercept) -0.1595528  0.0647908    -2.463    0.014 *  
x1           0.4871557  0.0321623    15.147   <2e-16 ***
x3          -0.6997853  0.0001121 -6240.617   <2e-16 ***

根据以上结果,我的结论是

  • 当预测变量在相似范围内时,共线性不是线性回归的问题。
  • 当预测变量不在相似范围内时,
    • 当两个高度相关的变量都在真实模型中时,共线性不是问题;
    • 当两个高度相关的变量中只有一个在真实模型中时,
      • 如果线性回归中包括其他“真实”变量,则线性回归将识别与有效变量相关的非有效变量。
      • 如果线性回归中未包含其他“真实”变量,则共线性问题很严重,从而导致标准误差膨胀。

有趣的是,尽管这些结果假定了预测变量/特征与y之间的线性关系。它们远非全面。如果预测变量中存在很强的非线性关系(例如,交互项x1 * x2,阶跃函数特征/虚拟变量(如果某些常数x1> c,则为1)等),会发生什么?如果您有低信号特征创建工作的信噪比数据,如算法交易,你总是简约的模型,以减少过度拟合(因为你的信号弱),所以仍然坚挺的原因,处理W¯¯多重
FXQuantTrader
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.