RandomForestClassifier: плохой отзыв после GridSearchCV - PullRequest
1 голос
/ 27 марта 2020

Я начинаю разработку модели с использованием RandomForestClasifier. Я использовал GridSearchCV с scroing = 'recall', чтобы найти наилучшие параметры, подходящие для модели.

Я знаю, что в данный момент модель не будет работать хорошо. Но меня смущает, почему с использованием параметров GridSearch стало хуже по сравнению с базовой моделью. Я также попробовал RandomzizedSearchCV с тем же поведением.

=== Base Model ===
=== Confusion Matrix ===
[[11181   305]
 [ 2289   139]]

=== Random Model ===
=== Confusion Matrix ===
[[11485     1]
 [ 2426     2]]

Я не ожидал, что мой истинный положительный результат превратится в 0 после оценки за отзыв.

n_estimators = [int(x) for x in np.linspace(start = 100, stop = 1000, num = 10)]
max_features = ['auto', 'sqrt']
max_depth = [int(x) for x in np.linspace(10, 20, num = 5)]
max_depth.append(None)
min_samples_split = [2, 5, 10]
min_samples_leaf = [int(x) for x in np.linspace(10, 100, num = 4)]
bootstrap = [True, False]
random_grid = {'n_estimators': n_estimators,
               'max_features': max_features,
               'max_depth': max_depth,
               'min_samples_split': min_samples_split,
               'min_samples_leaf': min_samples_leaf,
               #'bootstrap': bootstrap               }

rfo_random = GridSearchCV(RandomForestClassifier(), random_grid,scoring='recall',n_jobs = -1,verbose=5)

rfo_random.best_params_ говорит мне:

Out[144]: 
{'max_depth': 17,
 'max_features': 'sqrt',
 'min_samples_leaf': 10,
 'min_samples_split': 5,
 'n_estimators': 100}

Что-то не так с моим кодом? Я надеюсь, что кто-то может мне помочь.

Счастливые выходные

Кристоф

1 Ответ

0 голосов
/ 27 марта 2020

Мое лучшее предположение состоит в том, что, поскольку ваш набор данных очень сбалансирован по отношению к классу zero, при максимальном повторном вызове все прогнозы помещаются туда, поскольку в нем гораздо больше выборок. Вы можете видеть, что отзыв класса zero улучшился: случайная модель 11485 против базовой модели 11181.

Я думаю, что вы действительно хотите максимизировать, это отзыв класса one: recall(averaging='binary', pos_label=1).

Или в вашем коде:

rfo_random = GridSearchCV(RandomForestClassifier(), random_grid, scoring='recall_binary', n_jobs = -1, verbose=5)

Более подробную информацию вы можете найти в scikit-Learn документации

...