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
的实际实现感到困惑。
我的疑虑是..
- 当传递给参数的列表中没有
zero
时,为什么我在 LassoCV
中得到最佳 alpha 0
。
LassoCV
和 Lasso
之间有什么区别,那么,如果我无论如何都必须只从 GridSearchCV
中找到最合适的 alpha?
首先,您应该将 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 模型的最佳参数。
我知道通过 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
的实际实现感到困惑。
我的疑虑是..
- 当传递给参数的列表中没有
zero
时,为什么我在LassoCV
中得到最佳 alpha0
。 LassoCV
和Lasso
之间有什么区别,那么,如果我无论如何都必须只从GridSearchCV
中找到最合适的 alpha?
首先,您应该将 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 模型的最佳参数。