Sklearn中RidgeCV无cv_values_属性及5折交叉验证实现问题
我帮你梳理下这个问题的解决思路,我之前也遇到过类似的坑:
首先,你碰到的两个问题其实是相关的——要么是sklearn版本不匹配,要么是属性名称用错了。
为什么会出现这些问题?
store_cv_result=True报错:这个参数在旧版本的scikit-learn(低于0.23版本)里是不存在的,如果你用的是老版本,设置这个参数自然会报错。'RidgeCV' object has no attribute 'cv_values_':在较新的sklearn版本中,RidgeCV的交叉验证结果存储属性已经从cv_values_改成了cv_results_,你用旧的属性名当然找不到。
解决方案分两种情况:
情况1:你可以升级scikit-learn到最新稳定版(推荐)
先检查当前版本:
import sklearn print(sklearn.__version__)
如果版本低于0.23,执行升级命令:
pip install --upgrade scikit-learn
之后用以下代码实现5折Ridge交叉验证并查看结果:
from sklearn.linear_model import RidgeCV from sklearn.datasets import make_regression # 生成测试数据(替换成你的实际数据) X, y = make_regression(n_samples=100, n_features=10, random_state=42) # 初始化RidgeCV:设置5折CV,开启存储结果,指定要测试的alpha值 ridge_cv = RidgeCV(cv=5, store_cv_results=True, alphas=[0.1, 1.0, 10.0]) ridge_cv.fit(X, y) # 查看交叉验证结果,注意用cv_results_而不是cv_values_ print("交叉验证结果:") print(ridge_cv.cv_results_) # 如果你想查看每个alpha在各折上的验证得分,可以取这个字段 print("\n各alpha的5折验证得分:") print(ridge_cv.cv_results_['split_test_score'])
情况2:无法升级sklearn,改用GridSearchCV替代
如果因为环境限制不能升级,用GridSearchCV配合普通的Ridge模型也能实现同样的效果:
from sklearn.linear_model import Ridge from sklearn.model_selection import GridSearchCV from sklearn.datasets import make_regression X, y = make_regression(n_samples=100, n_features=10, random_state=42) # 定义要搜索的alpha参数网格 param_grid = {'alpha': [0.1, 1.0, 10.0]} # 初始化GridSearchCV:5折CV,返回训练得分(可选) grid_search = GridSearchCV(Ridge(), param_grid, cv=5, return_train_score=True) grid_search.fit(X, y) # 查看交叉验证结果 print("交叉验证结果:") print(grid_search.cv_results_)
总结
- 新版本sklearn用
RidgeCV(store_cv_results=True)+cv_results_属性 - 旧版本改用
GridSearchCV来获取交叉验证结果 - 别再用
cv_values_了,这个属性已经被废弃啦!
内容的提问来源于stack exchange,提问作者user34829
相关产品推荐
相关产品推荐

