首页 > 解决方案 > GridSearchCV 给出与 LassoCV 不同的结果以获得最佳 alpha

问题描述

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

    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选择最佳来创建模型,请注意,我对它们都使用了相同的交叉验证方案。但是在尝试使用 RepeatedKFold 交叉验证方案时。alphaalphassklearn.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. 我的怀疑是..

标签: python-3.xscikit-learnlasso-regressiongridsearchcv

解决方案


首先,您应该将alpha作为关键字参数而不是位置参数传递,因为 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_)

在这里查看有关 Python 打印格式和样式的更多详细信息。

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


推荐阅读