【发布时间】:2021-10-04 10:07:02
【问题描述】:
我在使用 columntransformer 对整个数据集进行预处理时遇到问题 - 也许您可以提供帮助:
首先我读取了我的数据集:
X_train, X_test, y_train, y_test = train_test_split(df, target, test_size=0.2, random_state=seed)
然后我进行预处理:
preprocessor = ColumnTransformer(
transformers=
[
("col_drop", "drop",["col1","col2",]),
('enc_1', BinaryEncoder(), ["Bank"]),
('enc_2', OneHotEncoder(), ["Chair"]),
('log', FunctionTransformer(np.log1p, validate=False), log_features),
('log_p', FunctionTransformer(np.log1p, validate=False), ["target_y]),
('pow', PowerTransformer(method="yeo-johnson"), pow_features)
],
remainder='passthrough',n_jobs=-1)
然后我用我的预处理器调用管道:
pipe.fit_transform(X_train, y_train)
这会产生错误:给定的列不是数据框的列
这在某种程度上是有道理的,因为我使用预处理器在 target_y,这基本上是我的目标特征,它只存在于 y_train 和 y_test 中。 我假设这会导致错误,因为目标不在 X_train 中。
问题:是否可以同时预处理 X 和 y,或者是否必须为我的 y 值使用另一个列转换器/管道?有什么好的解决办法吗?
【问题讨论】:
-
您是否更正了语法,因为在您指定 log_p 的预处理中缺少“(引号)
标签: python scikit-learn pipeline training-data