
本文详解如何解决使用KerasRegressor时因scikit-learn版本升级引发的AttributeError: 'super' object has no attribute 'sklearn_tags'错误,并提供安全、稳定的版本适配方案。
本文详解如何解决使用kerasregressor时因scikit-learn版本升级引发的`attributeerror: 'super' object has no attribute 'sklearn_tags'`错误,并提供安全、稳定的版本适配方案。
该错误源于 scikeras(Keras与scikit-learn桥接库)与新版 scikit-learn 的不兼容:自 scikit-learn 1.6.0 起,_sklearn_tags 属性被移除并重构为 __sklearn_tags__() 方法,而旧版 scikeras(如 v0.12.x 及更早)仍尝试访问已废弃的 sklearn_tags 属性,导致 AttributeError。
根本原因并非你的模型定义或训练逻辑有误——你提供的代码结构正确:KerasRegressor 封装函数式构建的回归/分类模型、sigmoid 输出配合 BinaryCrossentropy 损失、BinaryAccuracy 作为评估指标,均符合 Keras 最佳实践。问题纯粹出在 scikit-learn 与 scikeras 的版本协同上。
✅ 推荐解决方案(按优先级排序)
1. 升级至兼容版本(推荐 ✅)
安装 scikit-learn 1.6.1+(但低于1.7.0),该版本将原错误降级为 DeprecationWarning,不影响运行,且保持安全性与新特性:
FutureWarning: sklearn_tags is deprecated...
- ❌ 不要使用
sklearn>=1.7.0(截至2024年中),其完全移除了兼容层,将再次触发该错误; - ✅ 始终检查版本兼容性:运行
python -c "import sklearn; print(sklearn.__version__)"和python -c "import scikeras; print(scikeras.__version__)"; - ? 若使用 Jupyter,执行
pip install后需重启内核以生效; - ? 补充建议:对于纯回归任务(非二分类),请确认输出层激活函数与损失函数匹配——例如线性回归应使用
activation='linear'+loss='mse';当前代码中sigmoid+BinaryCrossentropy实际适用于二分类,若y_train是连续值,请修正为回归配置。
完成版本调整后,你的原始训练代码即可正常运行:
kr = KerasRegressor(build_model, epochs=100, batch_size=10000, verbose=1) kr.fit(X_train, y_train, validation_split=0.2) # ✅ 现在将成功执行
通过精准控制依赖版本,即可在保留现有建模逻辑的同时,彻底规避该属性访问异常,保障机器学习流水线的稳定性与可复现性。










