首页 > 解决方案 > 什么都不提供时,LassoCV 中的参数选择如何工作?

问题描述

基本上,我想知道当没有提供时,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?

谢谢你。

标签: pythonpython-3.xmachine-learningscikit-learncross-validation

解决方案


它如何确定这些 alpha 值中的哪一个是最好的?

它对所有提交的值进行交叉验证程序alpha,并返回最大的值score,根据文档,它是决定系数 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)

根据文档,拟合对象的属性之一是:

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=1e-3意思是alpha_min / alpha_max = 1e-3

因此,本质上它设置了一个可能的 aplhas 网格,例如最小值与最大值的比率等于eps,这里0.001; 让我们验证一下在我们的简单示例中是否属于这种情况:

reg.alphas_[4]/reg.alphas_[0]
# result
0.00099999999999999959

出于所有实际目的,它确实等于0.001


推荐阅读