【问题标题】:GridSearchCV gives different results than LassoCV for optimal alphaGridSearchCV 给出与 LassoCV 不同的结果以获得最佳 alpha
【发布时间】:2021-04-02 17:13:27
【问题描述】:

我知道使用交叉验证技术通过 sklearn.model_selection 库中的 GridSearchCV 类找到 alpha/lambda 最佳值的标准过程。这是我的代码来找到它。

    alphas=np.arange(0.0001,0.01,0.0005)
    cv=RepeatedKFold(n_splits=10,n_repeats=3, random_state=100)

    hyper_param = {'alpha':alphas}

    model = Lasso()

    model_cv = GridSearchCV(estimator = model,
                        param_grid=hyper_param,
                        scoring='r2',
                        cv=cv,
                        verbose=1,
                        return_train_score=True
                       )

   model_cv.fit(X_train,y_train)
   #checking the bestscore
   model_cv.best_params_

这给了我alpha=0.01

现在,查看LassoCV,据我了解,该库通过通过传递的alphas 列表选择最佳alpha 创建模型,请注意,我对两者都使用了相同的交叉验证方案他们。但是在尝试 sklearn.linear_model.LassoCV 与 RepeatedKFold 交叉验证方案时。

alphas=np.arange(0.0001,0.01,0.0005)
cv=RepeatedKFold(n_splits=10,n_repeats=3,random_state=100)
ls_cv_m=LassoCV(alphas,cv=cv,n_jobs=1,verbose=True,random_state=100)
ls_cv_m.fit(X_train_reduced,y_train)
print('Alpha Value %d'%ls_cv_m.alpha_)
print('The coefficients are {}',ls_cv_m.coef_)

对于相同的数据,我得到alpha=0,并且此 alpha 值不存在于通过alphas 参数传递的十进制值列表中。 这让我对LassoCV 的实际实现感到困惑。 我的怀疑是..

  • 当传递给参数的列表中没有 zero 时,为什么我在 LassoCV 中获得最佳 alpha 为 0
  • 那么LassoCVLasso 之间有什么区别,如果我必须无论如何只能从GridSearchCV 中找到最合适的alpha?

【问题讨论】:

    标签: python-3.x scikit-learn lasso-regression gridsearchcv


    【解决方案1】:

    首先,您应该将 alphas 作为关键字参数而不是位置参数传递,因为 LassoCV 的第一个位置参数是 eps

    ls_cv_m=LassoCV(alphas=alphas,cv=cv,n_jobs=1,verbose=True,random_state=100)
    

    然后,模型将作为最佳参数返回您之前定义的 alpha 之一,但是您只是将其打印为整数,将浮点数转换为 int。将 %d 替换为 %f 以浮点格式打印:

    print('Alpha Value %f'%ls_cv_m.alpha_)
    

    查看here,了解有关 Python 打印格式和样式的更多详细信息。

    关于您的第二个问题,Lasso 是线性模型,而 LassoCV 是一个迭代过程,可让您使用交叉验证找到 Lasso 模型的最佳参数。

    【讨论】:

    • 感谢@Davide.. 我真的对它的输出感到沮丧,尽管我现在可以看到我的错误。在这个圣诞节,你干净的回答真的帮助了我:)
    猜你喜欢
    • 2021-07-02
    • 2021-01-10
    • 2019-09-07
    • 2017-06-15
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多