R-套索回归-每个回归者的Lambda不同


11

我要执行以下操作:

1)OLS回归(无惩罚项)以获得beta系数;代表用于回归的变量。我这样做 Ĵbjj

lm.model = lm(y~ 0 + x)
betas    = coefficients(lm.model)

2)带惩罚项的套索回归,选择标准应为贝叶斯信息标准(BIC),由

λj=log(T)T|bj|

其中代表变量/回归数,代表观察数,代表步骤1)中获得的初始beta。我想获得此特定值的回归结果,该值对于使用的每个回归变量都不同。因此,如果存在三个变量,则将存在三个不同的值。Ť b * Ĵ λ Ĵ λ ĴjTbjλjλj

然后通过以下公式给出OLS-Lasso优化问题

minbϵRn={t=1T(ytbXt)2+Tj=1m(λt|bj|)}

我该如何在Lars或glmnet软件包中使用R?我找不到指定lambda的方法,而且我不确定100%如果运行可以得到正确的结果

lars.model <- lars(x,y,type = "lasso", intercept = FALSE)
predict.lars(lars.model, type="coefficients", mode="lambda")

感谢您的帮助。


更新:

我现在使用了以下代码:

fits.cv = cv.glmnet(x,y,type="mse",penalty.factor = pnlty)
lmin    = as.numeric(fits.cv[9]) #lambda.min
fits    = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty)
coef    = coef(fits, s = lmin)

在第1行中,我将交叉验证与指定的惩罚因子()配合使用,每个回归变量均不同。第2行选择fits.cv的“ lambda.min”,它是给出最小平均交叉验证误差的lambda。第3行对数据执行套索拟合()。我再次使用惩罚因子。第4行从拟合中提取系数,该系数属于在第2行中选择的“最优”。λλλj=log(T)T|bj|alpha=1λλ

现在我有了回归系数的beta系数,它描述了最小化问题的最佳解决方案

minbϵRn={t=1T(ytbXt)2+Tj=1m(λt|bj|)}

惩罚因子。最佳的系数集很可能是我最初使用的回归器的子集,这是拉索方法的结果,该方法减少了使用的回归器的数量。λj=log(T)T|bj|

我的理解和代码正确吗?


2
您可以在帖子中使用以美元符号括起来的LATEX标记。$\alpha$变成。请这样做,因为它将使人们更容易理解您的问题,并因此回答。α
Sycorax说,请

Answers:


15

glmnet文档(?glmnet)中,我们可以执行微分收缩。这使我们至少可以部分地回答OP的问题。

penalty.factor:单独的惩罚因子可以应用于每个系数。该数字相乘lambda以允许差异收缩。对于某些变量可以为0,这意味着没有收缩,并且该变量始终包含在模型中。所有变量的默认值都是1(对于中列出的变量,默认值是无穷大exclude)。注意:惩罚因子在内部重新定标为,总和为nvars,该lambda序列将反映此变化。

但是,为了完全回答这个问题,我认为有两种方法可供您使用,具体取决于您要完成的工作。

  1. glmnetλpenalty.factorλbjϕj=logTT|bj|ϕjbjpenalty.factorCϕj=ϕjm=Cj=1mlogTT|bj|ϕjϕjCϕjglmnetλ=1coef(model, s=1, exact=T)

  2. 第二种是“标准”使用方式glmnet:一种是执行重复的倍交叉验证以选择,以使样本外MSE最小化。这是我在下面详细描述的内容。我们使用CV并检查样本外 MSE的原因是,对于,样本内 MSE始终会被最小化,即是普通的MLE。在改变同时使用CV,我们可以估算模型如何处理样本外数据,并选择最佳的(在特定意义上)。kλλ=0bλλ

glmnet调用未指定(也不应指定,因为默认情况下出于性能原因它会计算整个轨迹)。将返回的系数λλcoef(fits,s=something)λsomethingλ

λcv.glmnetglmnetpenalty.factor

该程序优化

minbRmt=1T(ytbXt)2+λj=1m(ϕj|bj|)

其中是第功能的惩罚因子(您在参数中提供的内容)。(这与您的优化表达式略有不同;请注意,某些下标是不同的。)请注意,术语在所有功能部件中都是相同的,因此,某些功能部件比其他功能部件收缩更多的唯一方法是通过。重要的是,和是不同的;是标量,是向量!在此表达式中,是固定的/假定是已知的;也就是说,优化将选择最优,而不是最优Ĵ ħ λ φ Ĵ λ φ λ φ λ b λϕjjthpenalty.factorλϕjλϕλϕλbλ

glmnet据我所知,这基本上是动机:使用惩罚回归来估计对样本外性能并不太乐观的回归模型。如果这是您的目标,那么也许这毕竟是您的正确方法。


+1这是正确的。我还将补充一点,回归的正则化可以看作是贝叶斯先验,即最大后验(MAP)是正则化的最大似然(ML)。如果需要,在该框架中工作可为自己提供更大的灵活性。
TLJ 2015年

如果我运行, pnlty = log(24)/(24*betas); fits = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty) 该如何提取与我指定的lambda相对应的回归系数beta,因为lambda对于每个风险因素而言都是不同的?
2015年

1
@Dom太晚了,我突然意识到有一种明显的方法可以确切地获得您想要使用的东西glmnet。请参阅我的修订答案。
Sycorax说恢复莫妮卡

2
当心分别为每个预测变量自定义惩罚。在某些情况下,这仅相当于逐步选择变量。惩罚回归通过假设非常有限的惩罚参数和跨预测变量借用信息来减少均方误差。
Frank Harrell

2
@FrankHarrell感谢您的评论!似乎对每个预测变量使用不同的惩罚就构成了贝叶斯模型,该模型对每个参数都假设了不同的先验。这并不使我对贝叶斯推理总体上构成独特的危害。另外,您能否详细说明惩罚回归如何在预测变量之间借用信息?我不确定我是否完全掌握这种情况下的情况。
Sycorax说,请
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.