在 Scikit 中使用 Column Transformer 预处理带有目标变量的训练和测试数据
Using Column Transformer in Scikit to preprocess train and test data with target variable
我在使用 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,或者是否必须使用另一个 columntransformer/pipeline 作为我的 y 值?请问有什么好的解决办法吗?
通常,一个为特征做管道,另一个为目标值做管道。
您不能在 ColumnTransformer
或 Pipeline
中预处理目标(除非您计划将它们与自变量放在一起,然后再将它们分开);但是,有 TransformedTargetRegressor
(docs) 用于此用例。
我在使用 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,或者是否必须使用另一个 columntransformer/pipeline 作为我的 y 值?请问有什么好的解决办法吗?
通常,一个为特征做管道,另一个为目标值做管道。
您不能在 ColumnTransformer
或 Pipeline
中预处理目标(除非您计划将它们与自变量放在一起,然后再将它们分开);但是,有 TransformedTargetRegressor
(docs) 用于此用例。