GridSearchCV 给出的结果与 LassoCV 的最佳 alpha 不同

GridSearchCV gives different results than LassoCV for optimal alpha

我知道通过 GridSearchCV class 在 sklearn.model_selection library.Here 中使用交叉验证技术找到 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 创建模型,请注意,我已经使用他们两个的相同交叉验证方案。但是当尝试使用 RepeatedKFold 交叉验证方案 sklearn.linear_model.LassoCV 时。

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 的实际实现感到困惑。 我的疑虑是..

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

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

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

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

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

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