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

Keras Tuner是否支持validation split?如何为Scikit-learn模型实现训练/验证集拆分?

Keras Tuner是否支持validation split?如何为Scikit-learn模型实现训练/验证集拆分?

兄弟,我来帮你解决这个问题~

首先直接说结论:Keras Tuner的SklearnTuner确实不支持validation_split这个参数,这就是你报TypeError的原因。不过别担心,有两种靠谱的方式可以实现训练/验证集的拆分需求,我给你一步步讲:

方法一:手动拆分数据,用validation_data参数传递

你可以提前把现有的X_train和y_train拆分成训练子集和验证子集,然后通过validation_data参数传给search方法,这是最直接的方式。

修改你的代码如下:

# 先导入拆分工具
from sklearn.model_selection import train_test_split

# 手动拆分训练集和验证集(按30%比例拆分,保持类别分布一致)
X_train_sub, X_val, y_train_sub, y_val = train_test_split(
    X_train, y_train, 
    test_size=0.3, 
    stratify=y_train,  # 针对分类任务,保持分层拆分,避免类别失衡
    random_state=42
)

# 把拆分后的子集传给search,用validation_data指定验证集
tuner.search(X_train_sub, y_train_sub, validation_data=(X_val, y_val))

这样就能让调参过程中用你指定的验证集来评估模型性能了。

方法二:利用已配置的交叉验证(更稳健的方式)

看你的代码里已经设置了cv=model_selection.StratifiedKFold(5),其实SklearnTuner会自动基于这个交叉验证配置来评估模型——它会把你传入的X_train和y_train自动拆分成5份,每次用4份训练、1份验证,循环5次后取平均性能作为模型的最终得分。

这种方式比单一的验证集拆分更可靠,因为它能减少数据拆分带来的随机性影响。如果你追求调参的稳健性,其实不用额外拆分验证集,直接运行原来的search(去掉validation_split参数)就可以:

# 直接用完整的X_train和y_train,依赖交叉验证自动拆分
tuner.search(X_train, y_train)

总结一下

  • 如果你需要快速验证、固定单一验证集,选方法一,手动拆分后传validation_data;
  • 如果你需要更稳健的调参结果,选方法二,依赖已配置的交叉验证即可。

备注:内容来源于stack exchange,提问作者jordi pomada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:37:55