Поиск оптимальных гиперпараметров с помощью поиска по сетке

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

Гиперпараметры — это переменные, которые указываются пользователем при построении модели машинного обучения. Специалисты по данным могут повысить производительность модели, выбрав оптимальные гиперпараметры. Мы можем найти лучшую модель, выполнив процесс настройки гиперпараметров в нашей модели.

Настройка гиперпараметров — это процесс выбора набора оптимальных гиперпараметров для алгоритма обучения.

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

Поиск по сетке

Поиск по сетке — это метод настройки, который используется для поиска значений оптимальных гиперпараметров. Чтобы найти оптимальный гиперпараметр, он использует различные комбинации всех указанных гиперпараметров и вычисляет производительность для каждой комбинации. Затем он придумывает оптимальные значения гиперпараметров с наилучшей производительностью.

Выше приведено изображение поиска сетки по двум параметрам.

Перекрестная проверка и GridSearchCV

В методе GridSearchCV() перекрестная проверка также выполняется вместе с процессом поиска в сетке. Перекрестная проверка — это статистический метод, который используется для оценки производительности моделей машинного обучения.

При перекрестной проверке данные делятся на две части: данные обучения и данные проверки. Одним из самых популярных типов перекрестной проверки является перекрестная проверка K-fold. K-кратная перекрестная проверка — это итеративный процесс, который делит обучающие данные на K частей. Каждая итерация сохраняет один раздел для тестирования, а оставшиеся k-1 разделов — для обучения модели.

Производительность каждой итерации записывается, и, в конце концов, это дает среднее значение всех производительностей.

Выше приведена визуализация того, как работает итерация проверки K-кратности.

Присоединяйтесь к 16 000 своих коллег на Еженедельном глубоком обучении, чтобы узнавать о последних продуктах, приобретениях, технологиях, подробностях и многом другом.

Реализация поиска по сетке

Метод GridSearchCV() доступен в классе model_selection Scikit-learn. Есть несколько параметров, которые этот метод принимает в качестве входных данных, и эти параметры:

оценщик: экземпляр модели, для которого вы хотите найти гиперпараметры.

param_grid: словарь, содержащий гиперпараметры, которые вы хотите попробовать.

Оценка: показатели оценки, такие как r2 для модели регрессии и точность для модели классификации.

cv: Количество K-кратных перекрестных проверок.

Импорт библиотек

Сначала мы импортируем все библиотеки, которые хотим включить в наш пример.

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn import metrics
from sklearn.datasets import load_breast_cancer
import warnings
warnings.filterwarnings('ignore')

Импорт набора данных

Мы будем использовать набор данных о раке молочной железы, который доступен в пакете sklearn.datasets.

dataset = load_breast_cancer()
X = dataset.data
Y = dataset.target
#Splitting the data into train and test set
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size     =0.25, random_state = 101)

Создание классификатора

Мы будем импортировать и использовать Классификатор случайного леса для нашего набора данных о раке молочной железы. Случайный лес — это метаоценщик, который соответствует ряду классификаторов дерева решений. Он состоит из большого количества деревьев решений.

rf_classifier = RandomForestClassifier()

Инициализация объекта GridSearchCV()

Здесь в объекте GridSearchCV() мы передаем объект Random Forest Classifier в качестве оценщика и точность в качестве аргумента оценки.

params = [{'max_depth': list(range(10, 15)), 'max_features': list(range(0,5))}]

clf = GridSearchCV(rf_classifier, params, cv = 10, scoring='accuracy')
clf.fit(X_train, y_train)

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

Теперь, используя clf.best_params_, мы можем найти комбинацию гиперпараметров со значениями, которые дают наилучшую производительность для нашей указанной оценки.

print(clf.best_params_)
print(clf.best_score_)

Собираем все вместе

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn import metrics
from sklearn.datasets import load_breast_cancer
import warnings
warnings.filterwarnings('ignore')
dataset = load_breast_cancer()
X = dataset.data
Y = dataset.target
#Splitting the data into train and test set
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size     =0.25, random_state = 101)
rf_classifier = RandomForestClassifier()
params = [{'max_depth': list(range(10, 15)), 'max_features': list(range(0,14))}]

clf = GridSearchCV(rf_classifier, params, cv = 10, scoring='accuracy')
clf.fit(X_train, y_train)
print(clf.best_params_)
print(clf.best_score_)

Выход:

Теперь, используя best_params_, мы видим, что для классификатора случайного леса наши лучшие гиперпараметры — это max_depth: 13 и max_features: 11, и мы достигли точности: ~0,97

Почему мы должны использовать поиск по сетке?

Обычно при построении модели машинного обучения мы устанавливаем некоторые гиперпараметры и проверяем ее оценку (например, точность и точность для модели классификации и RMSE, r2 для модели регрессии) и ведем учет. Чтобы повысить точность модели, мы постоянно меняем значения гиперпараметров и записываем ее оценку.

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

GridSearchCV перебирает все параметры, которые мы указываем в методе GridSearchCV(), и отслеживает все оценки для каждой комбинации гиперпараметров. После повторения всех комбинаций он дает нам комбинацию гиперпараметров с лучшим результатом.

Ограничения

Одним из недостатков поиска по сетке является то, что когда дело доходит до размерности, он страдает при оценке количества гиперпараметров, которые растут экспоненциально. Хотя этот метод помогает нам найти лучшие гиперпараметры, это действительно исчерпывающая операция.

Если диапазон гиперпараметров велик, то комбинации гиперпараметров могут исчисляться тысячами, и процесс настройки займет много времени. Каждое добавленное значение в словарь сетки параметров может значительно увеличить время выполнения функции.

Заключение

Это все из этой статьи. В этой статье мы рассмотрели пошаговый процесс настройки гиперметра с помощью поиска по сетке.

Спасибо за прочтение!

Примечание редактора. Heartbeat — это интернет-издание и сообщество, созданное участниками и посвященное предоставлению лучших образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.