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

Это третья и последняя часть серии, посвященной альтернативным методам оптимизации гиперпараметров, которые вам необходимо знать. В первой части мы рассмотрели наиболее часто используемые методы (GridsearchCV и randomizedSearchCV) и первый альтернативный метод под названием Hyperopt (нажмите здесь, чтобы прочитать первую часть). Во второй части мы рассмотрели еще один альтернативный метод оптимизации гиперпараметров под названием scikit-optimize (нажмите здесь, чтобы прочитать вторую часть).

Теперь давайте изучим третий альтернативный метод оптимизации гиперпараметров.

Optuna

Optuna - это еще одна платформа Python с открытым исходным кодом для оптимизации гиперпараметров, которая использует байесовский метод для автоматизации пространства поиска гиперпараметров. Фреймворк разработан японской компанией ИИ под названием Preferred Networks. Optuna предоставляет более простой способ внедрения и использования, чем Hyperopt. Вы также можете указать, как долго должен длиться процесс оптимизации.

Особенности Optuna

Optuna содержит как минимум 5 важных функций, которые вам необходимо знать, чтобы запустить первую оптимизацию.

(а) Пространства поиска

Optuna предоставляет различные варианты для всех типов гиперпараметров. Наиболее распространенные варианты выбора следующие.

  • Категориальные параметры: используйте метод trials.suggest_categorical (), вам необходимо указать имя параметра и его варианты.
  • Целочисленные параметры: используйте метод trials.suggest_int (), вам необходимо указать имя параметра, низкое и высокое значение.
  • Параметры с плавающей запятой: используйте метод trials.suggest_float (), вам необходимо указать имя параметра, низкое и высокое значение.
  • Непрерывные параметры: используйте метод trials.suggest_uniform (), вам необходимо указать имя параметра, низкое и высокое значение.
  • Дискретные параметры: используйте метод trials.suggest_discrete_uniform (), вам необходимо указать имя параметра, нижнее значение, высокое значение и шаг дискретизации.

(б) Методы оптимизации (пробоотборники)

Optuna предоставляет различные методы для выполнения процесса оптимизации гиперпараметров. Наиболее распространенные методы: -

  • GridSampler: он использует поиск по сетке, испытания предлагают все комбинации параметров в заданном пространстве поиска во время исследования.
  • RandomSampler: использует случайную выборку. Этот сэмплер основан на независимой выборке.
  • TPESampler: он использует алгоритм TPE (Tree-structured Parzen Estimator).
  • CmaEsSampler: использует алгоритм CMA-ES.

(c) Целевая функция

Объяснение целевой функции такое же, как у методов hyperopt и scikit-optimize. Единственная разница в том, что Optuna позволяет вам определять пространство поиска и цель в одной функции.

Пример:

(d) Исследование

Исследование соответствует задаче оптимизации (набору испытаний). Если вам нужно запустить процесс оптимизации, вам необходимо создать объект исследования и передать целевую функцию методу под названием optimize () и установить количество испытаний следующим образом.

study = optuna.create_study()
study.optimize(objective, n_trials=100)

Метод create_study () позволяет вам выбрать, хотите ли вы максимизировать или минимизировать целевую функцию. Это одна из полезных функций, которые мне нравятся в optuna, потому что у вас есть возможность выбирать направление процесса оптимизации.

NB: Вы узнаете, как это реализовать на практическом примере.

(e) Визуализация

Модуль визуализации в Optuna предоставляет различные методы для создания фигур для результатов оптимизации. Эти методы помогут вам получить информацию о взаимодействии между параметрами и о том, как вы можете двигаться дальше. Вот несколько методов, которые вы можете использовать.

  • plot_contour (): этот метод отображает взаимосвязь параметров в виде контурного графика в исследовании.
  • plot_intermidiate_values ​​(): этот метод отображает промежуточные значения всех испытаний в исследовании.
  • plot_optimization_history (): этот метод строит историю оптимизации всех испытаний в исследовании.
  • plot_param_importances (): этот метод отображает важность гиперпараметров и их значения.
  • plot_edf (): этот метод строит график целевой величины EDF (эмпирической функции распределения) исследования.

NB: мы будем использовать некоторые из методов, упомянутых выше, в практическом примере.

Optuna на практике

Теперь, когда вы знаете важные особенности Optuna, в этом практическом примере мы будем использовать Набор данных о мобильных ценах, и задача состоит в том, чтобы создать модель, которая предсказывает, насколько высока цена на мобильный телефон 0 ( низкая стоимость) или 1 (средняя стоимость), или 2 (высокая стоимость) или 3 (очень высокая стоимость).

Установить Optuna

Вы можете установить последнюю версию с помощью:

pip install optuna

Затем импортируйте важные пакеты, включая optuna.

Набор данных

Загрузим набор данных из каталога данных. Чтобы получить дополнительную информацию о наборе данных, прочтите здесь.

Проверьте первые пять строк набора данных.

Как видите, в нашем наборе данных есть разные функции с числовыми значениями.

Давайте посмотрим на форму набора данных.

(2000, 21)

В этом наборе данных 2000 строк и 21 столбец. Теперь давайте разберемся со списком функций, которые есть в этом наборе данных.

['battery_power', 'blue', 'clock_speed', 'dual_sim', 'fc', 'four_g', 'int_memory', 'm_dep', 'mobile_wt', 'n_cores', 'pc', 'px_height', ' px_width ',' ram ',' sc_h ',' sc_w ',' talk_time ',' three_g ',' touch_screen ',' wifi ',' price_range ']

Вы можете найти значение имени каждого столбца здесь.



Разделение набора данных на целевой объект и независимые объекты

Это проблема классификации, затем мы разделим целевой объект и независимые объекты из набора данных. Наша целевая функция - диапазон_цен.

Предварительная обработка набора данных.

Затем стандартизируйте независимые функции с помощью метода StandardScaler из scikit-learn.

Определите пространство поиска и цель в одной функции.

Как я уже объяснял ранее, Optuna позволяет вам определять пространство поиска и цель в одной функции. Мы определим области поиска для следующих гиперпараметров модели случайного леса:

  • n_estimators - количество деревьев в лесу.
  • max_depth - максимальная глубина дерева.
  • критерий - функция для измерения качества раскола.

Мы используем метод trial.suggest_categorical () для определения пространства поиска для критерия и trial.suggest_int () для обоих max_depth и n_estimators.
Кроме того, мы используем перекрестную проверку, чтобы избежать переобучения, и тогда функция вернет среднюю точность.

Создать объект исследования

Затем мы создаем объект исследования, соответствующий задаче оптимизации. Метод create-study () позволяет нам указать название исследования, направление оптимизации (максимизировать или минимизировать) и метод оптимизации, который мы хотим использовать.

В нашем случае мы назвали объект исследования randomForest_optimization, направление оптимизации - максимизировать (означает, что чем выше оценка, тем лучше), а используемый метод оптимизации - TPESampler ().

Точная настройка модели

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

вывод:

Затем мы можем распечатать лучшую точность и используемые значения выбранных гиперпараметров.

(a) Показать лучшие выбранные значения гиперпараметров.

Вывод: {‘критерий’: ‘энтропия’, ‘max_depth’: 8, ‘n_estimators’: 700}

(б) Показать лучший результат или точность.

Вывод: 0,8714999999999999.

Наш лучший результат составляет около 87,15%.

История оптимизации сюжета

Мы можем использовать метод plot_optimization_history () из Optuna для построения истории оптимизации всех испытаний в исследовании. Нам просто нужно передать в метод оптимизированный объект исследования.

На графике показаны лучшие значения в разных испытаниях в процессе оптимизации.

Построить график важности гиперпараметров

Optuna предоставляет метод под названием plot_param_importances () для построения графика важности гиперпараметров. Нам просто нужно передать в метод оптимизированный объект исследования.

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

Сохранение и загрузка результатов поиска по гиперпараметрам

Вы можете сохранять и загружать результаты поиска по гиперпараметрам с помощью пакета joblib.

(a) Сохранение результатов поиска по гиперпараметрам.
Мы сохраним результаты поиска по гиперпараметрам в каталоге optuna_searches.

(b) Загрузить результаты поиска по гиперпараметрам.
Затем, если вы хотите загрузить результаты поиска по гиперпараметрам из каталога optuna_searches, вы можете использовать метод load () из joblib.

Заключение

Поздравляем, вы дочитали до конца вторую статью серии!

Вы можете скачать набор данных и записную книжку, использованные в этой статье, здесь:
https://github.com/Davisy/Hyperparameter-Optimization-Techniques

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

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

Если вы узнали что-то новое или вам понравилось читать эту статью, поделитесь ею, чтобы другие могли ее увидеть. А пока до встречи в моей следующей статье !. Со мной также можно связаться в Twitter @Davis_McDavid

И последнее: читайте больше подобных статей по следующим ссылкам.







Получите доступ к экспертному обзору - Подпишитесь на DDI Intel