我需要实现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编写简历?
答案 0 :(得分:0)
我认为答案与在不同模型上设置正则化强度的方式有关。
在RidgeCV中,您需要显式声明alpha
,因为没有根据交叉验证计算出的错误来进行参数调整。
但是,在LassoCV中,他们有一种方法可以根据CV错误自动计算alpha
。但是,如果要显式设置它们,可以通过更改可选参数:n_alpha
和alphas
参考:https://web.stanford.edu/~hastie/Papers/ESLII.pdf 有关更多详细信息,请参见第7章第4节。