Я использую конвейеры 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_))