我需要实现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)))


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

最佳答案

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

在RidgeCV中,您需要显式声明alpha,因为参数调整不是基于交叉验证所计算出的误差来进行的。

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

参考:https://web.stanford.edu/~hastie/Papers/ESLII.pdf
第7章第4节提供更多详细信息。

关于python - 为什么在此示例中RidgeCV中的alphas = alphas?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55189617/

10-11 07:46