Поиск в сетке по параметрам внутри параметров BaggingClassifier - PullRequest
0 голосов
/ 06 февраля 2019

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

В предыдущем вопросе мы имели дело с «ансамблем классификаторов ансамбля»где каждый имеет свои параметры ». Давайте начнем с примера, представленного MaximeKan в его ответе:

my_est = BaggingClassifier(RandomForestClassifier(n_estimators = 100, bootstrap = True, 
      max_features = 0.5), n_estimators = 5, bootstrap_features = False, bootstrap = False, 
      max_features = 1.0, max_samples = 0.6 )

Теперь скажем, что я хочу подняться на один уровень выше: соображения как эффективность, вычислительные затраты и т. д., кроме как и в качестве общей концепции: как бы я запустил поиск по сетке с такой настройкой?

Я могу настроить две сетки параметров вдоль этих линий:

Один для BaggingClassifier:

BC_param_grid = {
'bootstrap': [True, False],
'bootstrap_features': [True, False],    
'n_estimators': [5, 10, 15],
'max_samples' : [0.6, 0.8, 1.0]
}

И один для RandomForestClassifier:

RFC_param_grid = {
'bootstrap': [True, False],    
'n_estimators': [100, 200, 300],
'max_features' : [0.6, 0.8, 1.0]
}

Теперь я могу вызвать поиск по сетке с помощью моей оценки:

grid_search = GridSearchCV(estimator = my_est, param_grid = ???)

Что мне делать с параметром param_grid в этом случае?Или, более конкретно, как мне использовать обе сеточки параметров, которые я настроил?

Я должен сказать, что я играю с матрешками .

1 Ответ

0 голосов
/ 06 февраля 2019

После комментария @James Dellinger и дальнейшего расширения я смог это сделать.Оказывается, «секретный соус» - это действительно недокументированная функция - разделитель __ (двойное подчеркивание) (имеется некоторая отсылка к нему в документации Pipeline ): кажется, что добавление внутри /имя базовой оценки, за которым следует __ к имени параметра внутренней / базовой оценки, позволяет создать param_grid, который охватывает параметры как внешней, так и внутренней оценки.

Так, например,в данном вопросе внешняя оценка - BaggingClassifier, а внутренняя / базовая оценка - RandomForestClassifier.Итак, что вам нужно сделать, это, во-первых, импортировать то, что нужно импортировать:

from sklearn.ensemble import BaggingClassifier, RandomForestClassifier
from sklearn.model_selection import GridSearchCV

, а затем присваивания param_grid (в данном случае те, что в примере в вопросе):

param_grid = {
 'bootstrap': [True, False],
 'bootstrap_features': [True, False],    
 'n_estimators': [5, 10, 15],
 'max_samples' : [0.6, 0.8, 1.0],
 'base_estimator__bootstrap': [True, False],    
 'base_estimator__n_estimators': [100, 200, 300],
 'base_estimator__max_features' : [0.6, 0.8, 1.0]
}

И, наконец, ваш поиск по сетке:

grid_search=GridSearchCV(BaggingClassifier(base_estimator=RandomForestClassifier()), param_grid=param_grid, cv=5)

И вы отправляетесь в гонки.

...