【发布时间】:2023-04-08 22:38:01
【问题描述】:
我试图学习如何使用 Pipelines 和 ColumnTransformer 在回归之前有效地预处理数据。 这是我的尝试:
def preprocess_data(X):
cat_var = X.select_dtypes(['bool','object']).columns
num_var = X.select_dtypes(['int64','float64']).columns
steps = [('c', Pipeline(steps=[('s',SimpleImputer(strategy='most_frequent')),
('oe',OneHotEncoder(handle_unknown='ignore'))]), cat_var),
('n', SimpleImputer(strategy='median'), num_var)]
transformer = ColumnTransformer(transformers=steps, remainder='passthrough')
X = transformer.fit_transform(X=X)
return X
问题在于,当我转换训练数据集和测试数据集时,它为测试数据集选择了不同数量(更少)的列。这意味着我训练的模型不适用于测试数据。
我已经很好地修改了代码,没有数据泄露或相关问题
这可能是什么原因?我的逻辑有问题吗?
我正在使用以下dataset
谢谢!
解决方案: 返回变压器以及预处理数据。
return X, transformer
然后在预测之前使用transformer object对测试数据进行转换
【问题讨论】:
标签: python scikit-learn