什么都不提供时,LassoCV 中的参数选择如何工作?
Posted
技术标签:
【中文标题】什么都不提供时,LassoCV 中的参数选择如何工作?【英文标题】:How does parameter selection work in LassoCV when nothing is supplied? 【发布时间】:2019-12-03 22:41:31 【问题描述】:基本上,我想知道 sklearn 中的 LassoCV 在没有提供时如何选择 alpha 值(收缩参数)。运行语句时,
reg = LassoCV(cv = 5) # cv = 5 for 5 fold cross val
reg.fit(X, Y)
我对我得到的结果很满意;但是,我很好奇模型如何选择最佳 alpha。它只是简单地遍历具有给定容差的范围内的所有 alpha 吗?
除此之外,我还想问一下,当您为其提供 alpha 值或使用 n_alphas 参数时会发生什么,即:
reg = LassoCV(cv = 5, alphas = [.1, .2, .001, ...])
reg = LassoCV(cv = 5, n_alphas = 100)
它如何确定这些 alpha 值中的哪一个是最好的?提供多个 alpha 时,它会循环哪些 alpha?
谢谢。
【问题讨论】:
欢迎来到 SO;如果答案解决了您的问题,请接受它(请参阅What should I do when someone answers my question?) - 谢谢 【参考方案1】:它如何确定这些 alpha 值中的哪一个是最好的?
它对所有提交的值alpha
进行交叉验证,并返回最大的score
,根据docs,它是决定系数R^2。
当提供多个 alpha 时,它会循环哪些 alpha?
用一个简单的例子很容易看出;为简单起见,只要求n_alphas=5
,我们得到:
from sklearn.linear_model import LassoCV
from sklearn.datasets import make_regression
X, y = make_regression(noise=4, random_state=0)
reg = LassoCV(cv=5, n_alphas=5, random_state=0).fit(X, y)
根据docs,拟合对象的属性之一是:
alphas_ : numpy 数组,形状 (n_alphas,)
用于拟合的 alpha 网格
所以,我们有:
reg.alphas_
# result:
array([ 6.92751635e+01, 1.23190597e+01, 2.19067302e+00,
3.89562872e-01, 6.92751635e-02])
确切的值再次由参数eps
间接确定,其默认值为0.001
;再次来自文档:
eps : 浮动,可选
路径的长度。
eps=1e-3
表示alpha_min / alpha_max = 1e-3
。
所以,本质上它设置了一个可能的 aplhas 网格,例如最小值与最大值的比率等于@987654332@,这里是0.001
;让我们验证一下我们的简单示例中的情况:
reg.alphas_[4]/reg.alphas_[0]
# result
0.00099999999999999959
实际上,它确实等于0.001
。
【讨论】:
啊,我明白了,谢谢你的回答。现在,当我既不提供 n_alphas 也不提供要测试的 alpha 表时会发生什么。它如何确定 alpha 值?此外,在使用 n_alphas 时 - 我了解您给出的路径解释的长度 - 但它如何找到要使用的路径上的哪些 alpha? @tester9271 如果您不提供任何内容,它将使用默认值n_alphas=100
(再次,请参阅文档)。至于其余的,我不确定 - 无论网格长度如何,最大值和最小值似乎总是相同,但我不能说它们是如何选择的。在任何情况下,你都不应该太认真——这只是一种方便;您应该始终喜欢自己提供aplha
的确切值。以上是关于什么都不提供时,LassoCV 中的参数选择如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
sklearn、LassoCV() 和 ElasticCV() 坏了?
我应该使用 LassoCV 还是 GridSearchCV 来找到 Lasso 的最佳 alpha?