我应该使用 LassoCV 还是 GridSearchCV 来找到 Lasso 的最佳 alpha?

Posted

技术标签:

【中文标题】我应该使用 LassoCV 还是 GridSearchCV 来找到 Lasso 的最佳 alpha?【英文标题】:Should I use LassoCV or GridSearchCV to find an optimal alpha for Lasso? 【发布时间】:2021-07-02 19:00:02 【问题描述】:

据我了解,在使用Lasso回归的时候,可以在sklearn中使用GridSearchCV或者LassoCV来找到最优的alpha,也就是正则化参数。哪一个比另一个更受欢迎?

【问题讨论】:

根据documentation,使用像LassoCV 这样的交叉验证估计器的优势在于warm-starting 结果的可能性,这反过来又会提高速度。一个异常由RidgeCV 表示。 @amiola 你是在暗示LassoCV 更优秀吗? 【参考方案1】:

两者都可以得到相同的结果。 LassoCV 让您将 alpha 值数组传递给 alphas 以及将交叉验证参数直接传递给分类器,从而使操作变得更容易。

要对GridSearchCV 执行相同的操作,您必须将Lasso 分类器、alpha 值网格(即'alpha':[.5, 1, 5])和CV 参数传递给它。

我不会推荐其中一个。我能看到的唯一优势是,如果您使用GridSearchCV,您可以访问results_ 以及许多其他属性。如果您想汇总您尝试的 alpha 返回的所有模型,这可能会有所帮助。另一方面,正如@amiola 所指出的,LassoCV 可以利用在交叉验证过程(又名热启动)的先前步骤中使用预先计算的结果,这可能会导致更快的拟合时间。

【讨论】:

对于任何一种方法,您都可以快速访问参数的 p 值吗?此外,您如何确定 alpha 值的网格应该是什么?这似乎是交叉验证的全部意义在于确定要选择的单个 alpha 值,但我认为即使选择 alpha 值的网格似乎也是科学。 遗憾的是,sklearn 不返回 p 值。之所以如此,是因为它不是一个统计包,而是一个 ML 框架。你可以试试statsmodels,即sklearn符合R。至于如何选择网格的限制,你可以先尝试随机搜索,这应该会给你一个很好的近似值,然后在周围进行网格搜索随机搜索中最好的alpha。不过老实说,alpha=1 通常就足够了。 当您说“先尝试随机搜索”时,您的意思是从随机搜索中填充一个网格,然后将其输入 LassoCV?然后在 LassoCV 从您提供的网格中为您提供最佳 alpha 之后,您然后创建另一个具有该 alpha 周围值的网格,然后再次将其输入 LassoCV? 另外,关于 p 值的事情,这是有道理的。在过去的一周里,我刚开始尝试在 Python 中学习一些数据分析的东西,我遇到的一个主要问题是为什么 sklearn 中没有任何东西产生 p 值。它是为 ML/预测而不是推理/统计而设计的,这是有道理的。 作为最后的评论,我想你可以使用scipy.stats 计算你自己的 p 值,但这真的很乏味。

以上是关于我应该使用 LassoCV 还是 GridSearchCV 来找到 Lasso 的最佳 alpha?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn、LassoCV() 和 ElasticCV() 坏了?

python使用lassocv生成影像组学(radiomic)模型的系数表

什么都不提供时,LassoCV 中的参数选择如何工作?

scikit-learn 中的 LassoCV 如何分区数据?

python可视化lassocv特征筛选之后的特征的相关性分析热力图

可视化LassoCV的系数图