如何在模型比较外使用PyCaret预处理功能处理未见过的数据集?
问题:PyCaret预处理器能否处理训练/测试集之外的新数据集?
我在分析中大量使用PyCaret处理繁琐工作,通过setup()方法完成归一化、目标转换和特征选择等预处理。在利用PyCaret生成的训练/测试集完成模型创建与验证后,我希望将模型应用于未见过的数据集以模拟真实场景,期望能像处理训练/测试集一样,用PyCaret的预处理来处理该数据集。我看到教程中在setup()里做了多种转换后,直接将原始的data_unseen输入predict_model()方法,未做明显预处理。请问是否可以用PyCaret的预处理器处理训练/测试拆分之外的后续数据集?还是必须脱离PyCaret手动处理?
教程参考代码
import pandas as pd df = pd.read_csv('source/heart.csv') df.head() data = df.sample(frac=0.95, random_state=42) data_unseen = df.drop(data.index) data.reset_index(inplace=True, drop=True) data_unseen.reset_index(inplace=True, drop=True) print('Data for Modeling: ' + str(data.shape)) print('Unseen Data For Predictions: ' + str(data_unseen.shape)) # 输出: # Data for Modeling: (288, 14) # Unseen Data For Predictions: (15, 14) from pycaret.classification import * from imblearn.over_sampling import RandomOverSampler model = setup(data = data, target = 'output', normalize = True, normalize_method='minmax', train_size = 0.8, fix_imbalance = True, fix_imbalance_method=RandomOverSampler(), session_id=123) best = compare_models() tuned_best = tune_model(best) plot_model(tuned_best, plot = 'pr') final_best = finalize_model(tuned_best) predict_model(final_best) predict_model(final_best, data = data_unseen)
回答
完全可以用PyCaret的预处理器处理训练/测试集之外的新数据集,不需要手动处理,核心原因如下:
- 预处理逻辑自动绑定:当你调用
setup()时,PyCaret会自动记录所有预处理步骤的参数(比如归一化的min-max范围、特征选择规则、类别特征编码逻辑等),并将这些预处理流水线和后续训练的模型关联在一起。 finalize_model()整合完整流水线:调用finalize_model()后,最终模型会包含从数据预处理到模型预测的完整流程。此时用predict_model(final_best, data=data_unseen)传入新数据时,PyCaret会自动对新数据执行和训练集完全一致的预处理操作,不需要你手动重复归一化、特征选择等步骤。- 教程写法的合理性:教程中直接传入原始
data_unseen就是利用了这个机制——PyCaret内部会自动应用setup()中定义的所有转换,无需额外处理。
补充说明
- 如果需要部署模型,可以用
save_model(final_best, 'my_trained_model')把包含预处理流水线的模型保存为文件,之后用loaded_model = load_model('my_trained_model')加载,直接对新数据调用predict_model(loaded_model, data=new_data)即可,预处理逻辑会自动生效。 - 注意新数据集必须和训练集保持特征一致:列名完全相同、数据类型匹配,否则会触发预处理错误。
内容的提问来源于stack exchange,提问作者neanderslob
相关产品推荐
相关产品推荐

