Scikit-learn RidgeCV 报错怎么办?教你一招避坑
💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》
被 RidgeCV 的 cv 参数坑到凌晨三点,记录个解法
目录
昨晚写回归模型,想用 RidgeCV 做交叉验证调参。代码写得贼顺手:
fromsklearn.linear_modelimportRidgeCVmodel=RidgeCV(cv='5')# 以为字符串也能转整数跑起来直接报错:
TypeError: 'str' object cannot be interpreted as an integer我当场懵了。cv 不能是字符串?我之前在 KFold 里用过 n_splits='5'?不,KFold 的 n_splits 也要求整数。这特么是 scikit-learn 的硬性规则。
核心根源
RidgeCV 的 cv 参数必须是整数(表示折叠数)或 CrossValidator 对象。scikit-learn 内部用check_cv函数验证类型,字符串无法转换。我手滑写了'5',以为能自动转,结果直接报类型错误。别想当然,参数类型是死的。
解决代码
【错误示范】
# 错误:cv 传了字符串 '5',导致 TypeErrorfromsklearn.linear_modelimportRidgeCVmodel=RidgeCV(cv='5')# 这行会崩【正确姿势】
# 正确:cv 传整数 5,表示5折交叉验证fromsklearn.linear_modelimportRidgeCVmodel=RidgeCV(cv=5)# 一行搞定测试过:cv=5正常运行,cv='5'一定报错。别在 cv 上玩字符串,老老实实传整数。
避坑总结
- 参数类型别猜:scikit-learn 参数严格到变态。整数就是整数,字符串就是字符串。
- 报错先看类型:
TypeError基本都是类型不对。直接检查参数类型。 - IDE 要用好:PyCharm 会标出类型错误,写代码前先看提示。
- 文档别跳过:RidgeCV 的 cv 参数说明里写得清清楚楚:
int or cross-validator。
我踩过这坑,现在写下来。下次再写 cv 参数,直接写数字,别手滑。
(附:跑通的代码截图,证明没坑)
