如何在PyCaret中导出转换前后的训练集与测试集?
解决PyCaret中获取训练/测试集及NameError问题
为什么会出现NameError: name 'X_train' is not defined
PyCaret执行setup()后不会自动生成X_train/X_test这类全局变量,直接调用未定义的变量自然会触发错误。需要通过PyCaret提供的get_config()方法提取训练集、测试集等内部对象。
导出转换前后的训练集和测试集
1. 获取**未预处理(转换前)**的原始数据集
import pandas as pd # 从setup的配置中提取原始特征和标签 X_train_raw = get_config('X_train') y_train_raw = get_config('y_train') X_test_raw = get_config('X_test') y_test_raw = get_config('y_test') # 合并特征与标签,得到完整的原始训练/测试集 train_raw = pd.concat([X_train_raw, y_train_raw], axis=1) test_raw = pd.concat([X_test_raw, y_test_raw], axis=1)
2. 获取**预处理后(转换后)**的数据集
如果你需要导出经过编码、特征工程、去共线性等操作后的数据集,可以提取X_train_transformed和X_test_transformed:
# 获取预处理后的特征矩阵 train_transformed = get_config('X_train_transformed') test_transformed = get_config('X_test_transformed') # 合并标签(转换后的特征是numpy数组,需转为DataFrame后再合并) train_transformed = pd.DataFrame(train_transformed, columns=get_config('X_transformed_columns')) train_transformed['final_label'] = y_train_raw.values test_transformed = pd.DataFrame(test_transformed, columns=get_config('X_transformed_columns')) test_transformed['final_label'] = y_test_raw.values
修正你的predict_model代码
用上面获取到的原始数据集替换未定义的X_train/X_test即可:
# 假设rft是你通过create_model('rf')训练得到的模型 train_data = predict_model(rft, data=train_raw, raw_score=True) train_data['phase'] = 'train' test_data = predict_model(rft, data=test_raw, raw_score=True) test_data['phase'] = 'test'
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

