Использование FunctionTransformer в Python Pipeline для применения отдельных функций к y_train - PullRequest
0 голосов
/ 17 июня 2020

Я использую конвейеры sklearn и хотел бы включить в конвейер фильтр выбросов, который очищает y_train. Однако мне не хватает последнего фрагмента в моем коде, который позволяет мне применять мою индивидуальную функцию не к функциям, а к y_train. Можете ли вы помочь мне применить функцию IQRcap к моему конвейеру GridSearchCV, так как в настоящее время я получаю неверный синтаксис ошибки?

Вот мой код (при условии, что X_train, y_train, X_test и y_test уже загружены и определены):

from sklearn.pipeline import make_pipeline
import xgboost as xgb

def IQRcap (x):
    Q1 = x.quantile(0.25)
    Q3 = x.quantile(0.75)
    IQR = Q3 - Q1
    Max= (Q3 + 1.5 * IQR)
    Max= round_down (Max)
    if Q3 > 0:
        x.values[x>Max] = Max


pipe = make_pipeline([(FunctionTransformer(IQRcap(y_train)), xgb.XGBRegressor(objective='reg:squarederror'))])

gbm_param_grid = {
    'xgb_model__min_child_weight':[1, 2],

}

grid = GridSearchCV(pipe, gbm_param_grid, cv=5)

grid.fit (X_train, y_train)
print ("Best cross-validation accuracy> {:.2f}".format(grid.best_score_))
print ("Test score: {:.2f}".format(grid.score(X_test,y_test)))
print ("Best parameters: {}".format(grid.best_params_))

1 Ответ

0 голосов
/ 18 июня 2020

Существует специальный преобразователь для преобразования цели в задачах регрессии: TransformedTargetRegressor . Он должен сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...