我应该使用 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)模型的系数表
scikit-learn 中的 LassoCV 如何分区数据?