python-3.x - 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 交叉验证方案时。alpha
alphas
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
. 我的怀疑是..
- 当传递给参数的列表中没有时,
0
为什么我会得到最佳 alpha 。LassoCV
zero
- 如果无论如何我必须找到最合适的alpha,那么
LassoCV
和之间有什么区别?Lasso
GridSearchCV
解决方案
首先,您应该将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 模型的最佳参数。
推荐阅读
- bash - 将 grep 结果与整数进行转换和比较
- python - 在 pytube3 中实现 progress_bar 时出错
- ag-grid - ag-grid 获取过滤后的行
- r - 从 dashboardBody 链接到选项卡
- ios - iOS - 在集合视图单元格及其下方的视图周围添加边框
- r - R中的自动网页抓取以获得更多价值
- python - 在单独的列中分隔嵌套列表和字典
- java - Apache Camel:我如何使用聚合来获取实际的旧交换
- c# - Visual Studio 2019 未找到本地 IIS 网站
- powerbi - 将 power bi 连接到 azure cosmos db 的安全方式