Использование Smote с Gridsearchcv в Scikit-learn - PullRequest
0 голосов
/ 09 мая 2018

Я имею дело с несбалансированным набором данных и хочу выполнить поиск по сетке, чтобы настроить параметры моей модели с помощью gridsearchcv от scikit. Для пересчета данных я хочу использовать SMOTE, и я знаю, что могу включить это как этап конвейера и передать его в gridsearchcv. Меня беспокоит то, что я думаю, что smote будет применяться как к обучающим, так и к проверочным сгибам, а это не то, что вы должны делать. Набор проверки не должен быть превышен. Прав ли я, что весь конвейер будет применен к обоим разбиениям набора данных? И если да, как я могу обернуться? Большое спасибо заранее

1 Ответ

0 голосов
/ 09 мая 2018

Да, это можно сделать, но с imblearn Pipeline .

Видите ли, imblearn имеет свой собственный Pipeline для правильной обработки пробоотборников.Я описал это в аналогичный вопрос здесь .

При вызове predict() для imblearn.Pipeline объекта он пропустит метод выборки и оставит данные такими, какими они должны быть переданыследующий трансформатор.Вы можете убедиться в этом, посмотрев исходный код здесь :

        if hasattr(transform, "fit_sample"):
            pass
        else:
            Xt = transform.transform(Xt)

Так что для правильной работы вам необходимо следующее:

from imblearn.pipeline import Pipeline
model = Pipeline([
        ('sampling', SMOTE()),
        ('classification', LogisticRegression())
    ])

grid = GridSearchCV(model, params, ...)
grid.fit(X, y)

Заполнитедетали по мере необходимости, и трубопровод позаботится обо всем остальном.

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