【问题标题】:How does parameter selection work in LassoCV when nothing is supplied?什么都不提供时,LassoCV 中的参数选择如何工作?
【发布时间】: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?

谢谢。

【问题讨论】:

标签: python python-3.x machine-learning scikit-learn cross-validation


【解决方案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 的确切值。
猜你喜欢
  • 2019-08-15
  • 2016-08-25
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2023-01-03
  • 2019-04-15
相关资源
最近更新 更多