设置PyCaret的train_size=1.0仅训练全量数据集时遇错误,求指导
PyCaret 全数据集训练最优二分类模型方案
为什么设置train_size=1.0会报错
PyCaret的setup()默认依赖测试集完成模型评估与排序,当设置train_size=1.0时,没有剩余数据作为测试集,后续模型比较、指标计算步骤会因缺少测试数据触发错误。
正确实现全数据训练的两种方案
方案1:用交叉验证替代测试集评估
通过指定交叉验证折数,让PyCaret用全量数据的交叉验证结果评估模型,而非依赖划分出的测试集:
from pycaret.classification import setup, compare_models, finalize_model, predict_model # df为你的全量训练数据集 clf_setup = setup( data=df, target='你的目标列名', test_data=None, # 不预留测试集 fold=10, # 设置交叉验证折数,用于模型性能评估 verbose=False ) # 搜索最优二分类模型 best_model = compare_models() # 用全量数据重新训练最优模型(交叉验证阶段模型仅在训练折上训练) final_best_model = finalize_model(best_model) # 对未见过的数据进行预测 predictions = predict_model(final_best_model, data=unseen_data)
方案2:指定空测试集强制全数据训练
如果上述方案仍有问题,可以手动创建与训练集结构一致的空DataFrame作为测试集,避免PyCaret尝试划分测试数据:
import pandas as pd from pycaret.classification import setup, compare_models, finalize_model, predict_model # 创建与训练集结构一致的空测试集 empty_test = pd.DataFrame(columns=df.columns) clf_setup = setup( data=df, target='你的目标列名', test_data=empty_test, fold=5, # 交叉验证评估模型 verbose=False ) # 后续步骤同方案1 best_model = compare_models() final_best_model = finalize_model(best_model) predictions = predict_model(final_best_model, data=unseen_data)
关键注意事项
- 若仅需训练单个模型而非搜索最优模型,可跳过
compare_models(),直接用create_model()指定模型类型,再通过finalize_model()完成全量数据训练。 - 交叉验证折数可根据数据集大小调整,数据量小则设小折数(如5),数据量大可设10或更高,保证评估结果可靠。
内容的提问来源于stack exchange,提问作者Han
相关产品推荐
相关产品推荐

