使用GLMNET还是LARS计算LASSO解决方案?


13

我想获得LASSO问题的系数

||YXβ||+λ||β||1.

问题是glmnet和lars函数给出不同的答案。对于glmnet函数,我要求的系数。| Y | | 而不只是,但我仍然得到不同的答案。λ/||Y||λ

这是预期的吗?lars和glmnet之间是什么关系?我知道glmnet解决LASSO问题的速度更快,但是我想知道哪种方法更强大?λλλ


deps_stats恐怕我的数据集太大,以至于LARS无法处理它,而另一方面glmnet可以处理我的大型数据集。

mpiktas我想找到(Y-Xb)^ 2 + L \ sum | b_j |的解决方案 但是,当我从两种算法(拉尔斯和glmnet)询问它们对于特定L的计算系数时,我得到了不同的答案……我想知道这是正确的/预期的吗?或者我只是为两个函数使用了错误的lambda。


1
请提供一个示例来说明您的问题。另外,您如何定义算法的功效?
mpiktas,2011年

1
我在几个项目中使用了glmnet和lars软件包。以我有限的经验,我在实现glmnet时遇到了很多问题。我认为glmnet需要针对数据框中使用的变量类型进行一些错误修复。此外,glmnet的文档令人困惑。我最终使用了lars,对结果非常满意。没关系,您的问题的大小,我认为Lars可以解决。
deps_stats 2011年

“问题在于glmnet和lars函数给出了不同的答案。” 我也有同样的问题。有什么答案吗?
授予

系数的答案大不相同?从阅读原始帖子开始,您真的不应该glmnet从LARS实施中请求一个lambda解决方案,也可能不会。它们提供了偏差与方差范围内的所有解决方案。这使得很难比较实际系数。但是,相同的变量可能应该以相似的顺序变为非零。
Shea Parkes 2012年

Answers:


14

以我的经验,对于小问题,非常稀疏的问题或非常“广泛”的问题(比示例多得多的功能),LARS更快。确实,如果不计算完整的正则化路径,其计算成本将受到所选功能数量的限制。另一方面,对于大问题,glmnet(协调下降优化)速度更快。除其他事项外,坐标下降具有良好的数据访问模式(友好的内存),并且由于可以部分拟合收敛,因此可以从非常大的数据集的数据冗余中受益。特别是,它不会遭受高度相关的数据集的困扰。

我们(scikit-learn的核心开发人员)也得出的结论是,如果您对数据没有很强的先验知识,则应该使用glmnet(或协调下降优化,而不是谈论算法)。而不是实施)。

可以在Julien Mairal的论文中比较有趣的基准:

http://www.di.ens.fr/~mairal/resources/pdf/phd_thesis.pdf

1.4节,尤其是1.4.5节(第22页)

朱利安得出的结论略有不同,尽管他对该问题的分析是相似的。我怀疑这是因为他对非常广泛的问题非常感兴趣。


您的大多数回复都是通过CW做出的(在这里,也可以在metaoptimize.com/qa上获得)...为什么有任何原因?
chl

1
因为我认为人们能够纠正错别字,错误的措辞是件好事……我喜欢不断完善答案的想法。这违反最佳做法吗?
Gael Varoquaux

2
我修正了两三个错字。与CW本身无关,除非您考虑编辑帖子所需的较低代表!用户可以建议任何修改;但CW做出回应后,您将无法从他们那里获得代表。我想您并不追求代表,但是由于您的回答总是很恰当,我只是想知道...干杯。
chl

1

在多个特征具有完美共线性的情况下,LASSO是不唯一的。这是一个简单的思想实验来证明这一点。

yx1x2yx1x2yx1x2β1=1Pβ2=0Pβ1=0β21P


2
@dsmcha,很抱歉这么说,但是我认为我不太喜欢那个例子。响应与两个预测变量相同吗?我认为这超出了病态。
主教

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.