Machine Learning, Sklearn

GridSearchCV. Поиск лучших параметров модели

Время прочтения: 2 мин.

Подбор параметров – одна из важных задач для построения модели машинного обучения. Изменение параметров модели может принципиально повлиять на ее качество. Например, модель может переобучиться. Перебор этих параметров вручную может занять колоссальное количество времени. Однако, существует модуль GridSearchCV.

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

Перейдем к примеру.

Для начала импортируем необходимые библиотеки:

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

В качестве датасэта будем использовать данные о съедобности грибов.

Фрагмент нашего датафрейма:

Для создания модели нам необходимо вытащить целевой признак “Class” в переменную y_train, а оставшиеся признаки в переменную X_train:

X_train = df.drop('class', axis=1)
y_train = df['class']

Затем объявляем классификатор RandomForest, не внося в него никаких параметров:

clf = RandomForestClassifier()

Отдельно создаем словарик, в который вписываем параметры, которые будем прогонять GridSearch’ем. Для примера будем использовать следующие параметры:

                       n_estimators – число деревьев в лесу. Оно будет изменяться от 10 до 50 с шагом 10

                       max_depth – глубина дерева. Она будет изменяться от 1 до 12 с шагом в 2

                       min_samples_leaf – минимальное число образцов в листах. Оно будет изменяться от 1 до 7

                       min_samples_leaf – минимальное число образцов для сплита. Оно будет изменяться от 2 до 9.

parametrs = { 'n_estimators': range (10, 51, 10),
              'max_depth': range (1,13, 2),
              'min_samples_leaf': range (1,8),
              'min_samples_split': range (2,10,2) }

Запускаем обучение:

grid = GridSearchCV(clf, parametrs, cv=5)
grid.fit(X_train, y_train)

Выводим результат:

grid.best_params_

{'criterion': 'entropy',
 'max_depth': 5,
 'min_samples_leaf': 3,
 'min_samples_split': 2,
 'n_estimators': 30}

Полученные параметры являются лучшими для нашей модели. 

Советуем почитать