#python #scikit-learn #pipeline #training-data
Вопрос:
У меня есть проблемы с предварительной обработкой набора данных в целом с помощью 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)
Это приводит к ошибке: данный столбец не является столбцом фрейма данных
И это в некотором смысле имеет смысл, потому что я использую препроцессор для выполнения функции nlog1p в target_y, которая в основном является моей целевой функцией, которая присутствует только в y_train и y_test. Я предполагаю, что это вызывает ошибку, потому что цель не находится в X_train.
Вопрос: Можно ли предварительно обработать X и y сразу или обязательно использовать другой преобразователь/конвейер столбцов для моих значений y? Есть ли какое-нибудь хорошее решение для этого?
Комментарии:
1. Вы исправили синтаксис, так как в предварительной обработке отсутствует » (цитата), где вы указали log_p
Ответ №1:
Вы не можете предварительно обработать целевые объекты в ColumnTransformer
или Pipeline
(если только вы не планируете объединить их с независимыми переменными, а затем разделить их позже); однако TransformedTargetRegressor
для этого варианта использования есть (документы).
Комментарии:
1. Спасибо, это решает мою проблему, я не знал, что это существует!
2. Пожалуйста, предоставьте минимальный фрагмент кода
Ответ №2:
обычно один выполняет конвейер для функций , а другой-для целевых значений .