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

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

Что такое перекрестная проверка?

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

Прочтите scikit-learn документацию по перекрестной проверке для лучшего понимания.

Резюме для поиска по сетке:

Перекрестная проверка Grid Search - это метод выбора лучших из моделей машинного обучения, параметризованных сеткой гиперпараметров. Библиотека Scikit-Learn поставляется с реализацией перекрестной проверки поиска по сетке.

Grid Search CV пробует все комбинации параметров сетки для модели и возвращает лучший набор параметров с наилучшей оценкой производительности. Это также может служить недостатком, поскольку обучение модели каждой комбинации параметров увеличивает временную сложность.

param_grid = {
"max_depth": [3, 4, 7, 10, 25],
"gamma": [0.5, 1, 5, 10, 25],
"min_child_weight": [1, 3, 5, 10, 25],
"reg_lambda": [5, 10, 50, 100, 300],
"scale_pos_weight": [1, 3, 5, 10, 25]
}
# Grid Search CV implementation
xgb_cl = xgb.XGBClassifier(objective="binary:logistic")
grid_cv = GridSearchCV(xgb_cl, param_grid, scoring="roc_auc", n_jobs=-1, cv=3)
grid_cv.fit(X_train, y_train)
# Return set of parameters with the best performance
grid_cv.best_params_
# Return the performance metric score
grid_cv.best_score_

Приведенный выше фрагмент кода объясняет использование Grid Search CV с cv = 3 и обучает набор данных X_train всем сочетаниям param_grid параметров.

Для набора данных большого размера временная сложность Grid Search CV увеличивается экспоненциально, и, следовательно, это практически невозможно.

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

В этой статье мы обсудим новый алгоритм, уменьшающий вдвое CV поиска по сетке, который работает так же хорошо, как CV поиска по сетке, с большим уменьшением временной сложности по сравнению с поиском по сетке.

Уменьшение вдвое поиска по сетке:

В то время как CV поиска по сетке и CV случайного поиска обучают все компоненты (комбинацию сетки параметров) для всех данных, CV поиска по сетке вдвое или CV случайного поиска пополам следует подходу с последовательным сокращением вдвое .

Шаги, выполняемые с уменьшением вдвое CV поиска по сетке (HGS):

  1. HGS обучает подмножество данных всем комбинациям параметров.
  2. Выбираются наиболее эффективные кандидаты или комбинации.
  3. Большая часть обучающих данных обучается на наиболее эффективных кандидатах.
  4. Вышеупомянутые 3 шага повторяются до тех пор, пока не останется лучший набор гиперпараметров.

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

Реализация:

Библиотека Scikit-Learn поставляется с реализацией CV-алгоритма Halving Grid Search. В приведенном ниже фрагменте кода объясняется работа и реализация алгоритма.

param_grid = {
"max_depth": [3, 4, 7, 10, 25],
"gamma": [0.5, 1, 5, 10, 25],
"min_child_weight": [1, 3, 5, 10, 25],
"reg_lambda": [5, 10, 50, 100, 300],
"scale_pos_weight": [1, 3, 5, 10, 25]
}
# Grid Search CV implementation
xgb_cl = xgb.XGBClassifier(objective="binary:logistic")
halving_cv = HalvingGridSearchCV(xgb_cl, param_grid, scoring="roc_auc", n_jobs=-1, min_resources="exhaust", factor=3)
halving_cv.fit(X_train, y_train)
# Return set of parameters with the best performance
halving_cv.best_params_
# Return the performance metric score
halving_cv.best_score_

Контрольное время и оценка производительности:

Теперь давайте сравним оценку производительности и временную сложность между Grid Search CV и Half Search CV.

Набор данных о мошенничестве с кредитными картами от Kaggle используется для вычисления временных чисел. Это проблема классификации, и показатель ROC-AUC использовался в качестве показателя для сравнения производительности.

Только ~ 7,5 тыс. Записей использовались для обучения с cv = 3 и ~ 3 тыс. Записей для целей тестирования.

При соблюдении вышеуказанных временных чисел для сетки параметров, содержащей 3125 комбинаций, CV поиска по сетке занял 10856 секунд (~ 3 часа), тогда как сокращение вдвое по сетке CV заняло 465 секунд (~ 8 минут), что примерно в 23 раза быстрее.

Заключение:

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

Самая лучшая часть - это реализация Halving Grid Search CV, которая поставляется с пакетом scikit-learn для использования.

Использованная литература:

[1] Документация CV CV по сокращению вдвое: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.HalvingGridSearchCV.html

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