You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Sci-Keras导入KerasRegressor后cross_val_score结果变动如何解读

问题原因与解决方法

核心原因:默认评分指标发生变化

旧版 keras.wrappers.scikit_learn.KerasRegressor 的 score 方法默认返回负均方误差(Negative MSE),这也是你最初得到的结果都是负数、绝对值对应MSE的原因。
而 SciKeras 提供的 scikeras.wrappers.KerasRegressor 的 score 方法默认返回决定系数R²:

  • R²的取值范围为(-∞, 1],越接近1代表模型拟合效果越好,接近0代表模型拟合效果和直接预测目标值的均值没有差异
  • 你新得到的结果全部落在-0.03到0.28区间,完全符合R²的数值特征,本质上不是MSE,属于对输出指标的误解

其他可能的影响因素

  • 目标值自动预处理逻辑差异:SciKeras 内置了可选的目标值缩放逻辑,如果你没有显式设置 y_scaler=None,部分版本会默认对y做标准化处理,直接输出的原始MSE也会被缩放至很小的范围
  • 模型编译逻辑差异:如果你的 baseline_model 没有在内部完成编译,旧版KerasRegressor会默认用MSE作为损失,SciKeras的编译逻辑和参数传递规则略有区别,可能出现损失函数不匹配的问题

解决方法

  1. 如果你需要得到和旧版完全一致的负MSE输出,在调用交叉验证工具(如cross_val_score)时显式指定评分规则:
from sklearn.model_selection import cross_val_score
scores = cross_val_score(pipe, X, y, scoring='neg_mean_squared_error', cv=10)
  1. 如果你要统一KerasRegressor本身的输出逻辑,可以在初始化时显式指定评分函数,或者关闭自动缩放:
KerasRegressor(
    model=baseline_model,
    epochs=20,
    batch_size=50,
    verbose=0,
    y_scaler=None, # 关闭目标值自动缩放
    score=lambda y_true, y_pred: -((y_true - y_pred)**2).mean() # 自定义返回负MSE
)

内容的提问来源于stack exchange,提问作者Andrew Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:06:03