为什么在此示例中RidgeCV中的alphas = alphas?

时间:2019-03-15 19:37:56

标签: python pandas machine-learning scikit-learn regression

我需要实现Lasso和Ridge回归并通过交叉验证来计算超参数。 我找到了执行此操作的代码,但是我不太明白。

lassocv = LassoCV(alphas=None, cv=15, max_iter=100000, normalize=True)
lassocv.fit(X_train, y_train)
lasso = Lasso(alpha=lassocv.alpha_, normalize=True)
lasso.fit(X_train, y_train)
rmse = np.sqrt(mean_squared_error(y_val, lasso.predict(X_val)))

ridgecv = RidgeCV(alphas=alphas, normalize=True)
ridgecv.fit(X_train, y_train)
ridge = Ridge(alpha=ridgecv.alpha_, normalize=True)
ridge.fit(X_train, y_train)
rmse = np.sqrt(mean_squared_error(y_val, ridge.predict(X_val)))

那么,为什么alphas = RidgeCV中的alphas?如果我写的alphas = None,则会发生错误。为什么没有必要为ridgecv编写简历?

1 个答案:

答案 0 :(得分:0)

我认为答案与在不同模型上设置正则化强度的方式有关。

在RidgeCV中,您需要显式声明alpha,因为没有根据交叉验证计算出的错误来进行参数调整。

但是,在LassoCV中,他们有一种方法可以根据CV错误自动计算alpha。但是,如果要显式设置它们,可以通过更改可选参数:n_alphaalphas

来进行设置。

参考:https://web.stanford.edu/~hastie/Papers/ESLII.pdf 有关更多详细信息,请参见第7章第4节。