Краткое руководство по настройке гиперпараметров с использованием Scikit Learn GridSearchCV и компромиссу смещения / дисперсии

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

В этом блоге мы обсудим некоторые важные гиперпараметры, используемые в следующих классификаторах машинного обучения: K-ближайшие соседи, деревья решений и случайные леса, AdaBoost и Gradient Boost, а также машины опорных векторов. В частности, я сосредоточусь на гиперпараметрах, которые имеют тенденцию иметь наибольшее влияние на компромисс смещения и дисперсии. Обратите внимание, что приведенные ниже списки ни в коем случае не являются исчерпывающими, и я призываю каждого исследовать каждый параметр самостоятельно.

Этот блог предполагает базовое понимание каждого классификатора, поэтому мы пропустим обзор теории и в основном погрузимся в процесс настройки с помощью Scikit Learn.

K-Ближайшие соседи (KNN)

В классификаторе KNN (документация) точка данных помечается на основе ее близости к своим соседям. Но сколько соседей следует учитывать при классификации?

N_neighbors (K)

Проще говоря, K - это количество соседей, которое определяет границу классификации немаркированной точки данных.

K принимает диапазон целых чисел (по умолчанию = 5), находит K-ближайших соседей, вычисляет расстояние от каждой непомеченной точки до этих K-соседей. Как рассчитывается расстояние, определяется параметром метрики, описанным ниже.

Важное примечание. K имеет тенденцию быть нечетным, чтобы избежать совпадений (то есть, если K = 4, это может привести к ответам 2 Да и 2 Нет, что запутает классификатор).

Компромисс между отклонением и отклонением: в целом, чем меньше K, тем плотнее прилегает (модели). Следовательно, уменьшая K, вы уменьшаете смещение и увеличиваете дисперсию, что приводит к более сложной модели.

Другие параметры для рассмотрения

  • Leaf_size определяет, сколько наблюдений фиксируется в каждом листе алгоритмов BallTree или KDTree, которые в конечном итоге и составляют классификацию. По умолчанию равно 30. Вы можете настроить leaf_size, передав диапазон целых чисел, например n_neighbors, чтобы найти оптимальный размер листа. Важно отметить, что leaf_size может серьезно повлиять на время выполнения и использование памяти. Из-за этого вы, как правило, не запускаете его на leaf_sizes меньше 30 (меньшие листья равны большему количеству листьев).
  • Вес - это функция, которая взвешивает данные при прогнозировании. «Равномерное» - это функция с равным весом, а «расстояние» взвешивает точки по величине, обратной их расстоянию (т. Е. Местоположение имеет значение!). Использование функции «расстояние» приведет к тому, что более близкие точки данных окажут более значительное влияние на классификацию.
  • Метрика может быть установлена ​​на различные метрики расстояния (см. здесь), такие как Манхэттенская, Евклидова, Минковского или взвешенная Минковски (по умолчанию - Минковский с p = 2, что является евклидовым расстоянием). Выбор метрики во многом зависит от того, на какой вопрос вы пытаетесь ответить.
  • Примечание: мы пропустим гиперпараметр алгоритма, потому что для этого параметра предпочтительно устанавливать значение «auto», чтобы компьютер сообщал вам, какой древовидный алгоритм лучше всего. Я бы рекомендовал прочитать документацию sklearn для получения дополнительной информации о различиях между алгоритмами BallTree и KDTree.

Пример блока кода оптимизации K (предполагается, что F1 - лучший показатель оценки

Деревья решений и случайные леса

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

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

  • N_estimators (используется только в случайных лесах) - это количество деревьев решений, используемых при создании леса (по умолчанию = 100). Вообще говоря, чем больше некоррелированных деревьев в нашем лесу, тем ближе их индивидуальные ошибки к усреднению. Однако больше не значит лучше, поскольку это может иметь экспоненциальный эффект на затраты на вычисления. После определенного момента существуют статистические свидетельства убывающей доходности. Компромисс между отклонением и отклонением. Теоретически, чем больше деревьев, тем больше подходит модель (низкое отклонение). Однако в сочетании с упаковкой в ​​мешки нам не о чем беспокоиться.
  • Макс_глубина - целое число, задающее максимальную глубину дерева. По умолчанию установлено значение None, что означает, что узлы расширяются до тех пор, пока все листья не станут чистыми (то есть все данные принадлежат одному классу) или пока все листья не будут содержать меньше min_samples_split, которое мы определим далее. Компромисс смещения и отклонения: увеличение max_depth приводит к переобучению (низкому смещению)
  • Min_samples_split - минимальное количество выборок, необходимое для разделения внутреннего узла. Компромисс между отклонением и смещением: чем выше минимум, тем более «кластеризованным» будет решение, что может привести к недостаточному соответствию (высокому смещению).
  • Min_samples_leaf определяет минимальное количество выборок, необходимых для каждого листа. По умолчанию здесь вводится 1. Компромисс смещения-дисперсии: аналогично min_samples_split, если вы не разрешаете модели разделяться (скажем, потому что ваш параметр min_samples_lear установлен слишком высоко), ваша модель может быть чрезмерно обобщающей данные обучения (высокая систематическая ошибка).

Другие параметры для рассмотрения

  • Критерий измеряет качество разделения и получает либо «Джини» для примеси Джини (по умолчанию), либо «энтропию» для получения информации. Примесь Джини - это вероятность неверной классификации случайно выбранной точки данных, если она была помечена в соответствии с распределением классов набора данных. Энтропия - это мера хаоса в вашем наборе данных. Если разделение набора данных приводит к снижению энтропии, значит, вы получили информацию (т.е. ваши данные стали более полезными для принятия решений), и разделение стоит дополнительных вычислительных затрат.

Оптимизация GridSearchCV для случайных лесов

AdaBoost и повышение градиента

Используя слабых обучающихся (также известных как пни), улучшая алгоритмы, такие как AdaBoost (документация) и Gradient Boosting (документация), сосредотачиваются на том, что модель неверно классифицирует. Уделяя больше веса этим ошибочно классифицированным точкам данных, модель сосредотачивается на том, что было не так, чтобы узнать, как их исправить.

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

  • N_estimators - максимальное количество оценок, при котором повышение прекращается. Если достигается идеальное соответствие, алгоритм останавливается. Значение по умолчанию - 50. Компромисс смещения-дисперсии: чем выше количество оценок в вашей модели, тем меньше смещение.

Другие важные параметры

  • Learning_rate - это скорость, с которой мы корректируем веса нашей модели с учетом градиента потерь. С точки зрения непрофессионала: чем ниже скорость обучения, тем медленнее мы движемся по наклону функции потерь. Важное примечание: существует компромисс между Learning_rate и n_estimators, так как крошечный Learning_rate и большой n_estimators не обязательно улучшат результаты по сравнению с большими вычислительными затратами.
  • Base_estimator (AdaBoost) / Loss (Gradient Boosting) - это базовая оценка, на основе которой строится усиленный ансамбль. Для AdaBoost значение по умолчанию - Нет, что соответствует классификатору дерева решений с максимальной глубиной 1 (пень). Для Gradient Boosting значением по умолчанию является отклонение, что соответствует логистической регрессии. Если передано «экспоненциальное», используется алгоритм AdaBoost.

Оптимизация GridSearchCV для AdaBoost

Машины опорных векторов (SVM)

У этого классификатора, который формально определяется разделяющей гиперплоскостью (давайте потратим минутку, чтобы оценить, насколько классным является слово гиперплоскость), нужно учесть множество параметров настройки, но мы сосредоточимся только на трех: C, ядро ​​и гамма.

  • C - параметр регуляризации. Как отмечается в документации, сила регуляризации обратно пропорциональна C. По сути, этот параметр сообщает модели, насколько вы хотите избежать ошибки. Вы можете думать об обратном C как о вашем общем бюджете ошибок (суммированном по всем точкам обучения), с более низким значением C, допускающим больше ошибок, чем более высокое значение C. Компромисс смещения-дисперсии: как Ранее упоминалось, что более низкое значение C допускает больше ошибок, что приводит к более высокому смещению.
  • Гамма определяет, насколько далеко распространяется влияние одной тренировочной точки. Низкое значение гаммы позволяет учитывать при расчете точки, удаленные от гиперплоскости, тогда как высокое значение гаммы отдает приоритет близости. Компромисс смещения-дисперсии: считайте, что гамма обратно пропорциональна K в KNN , чем выше гамма, тем точнее соответствие (смещение низкое).

Очень важный гиперпараметр

  • Ядро указывает, какое ядро ​​следует использовать. Некоторые из приемлемых струн - linear, poly и rbf. Linear использует линейную алгебру для определения гиперплоскости, в то время как poly использует многочлен для определения гиперплоскости в более высоком измерении (см. Уловка с ядром). RBF, или ядро ​​радиальной базисной функции, использует расстояние между входом и некоторой фиксированной точкой (либо началом, либо некоторой фиксированной точкой c), чтобы сделать предположение классификации. Более подробную информацию о радиальной базовой функции можно найти здесь.

GridSearchCV Оптимизация для SVM.

Последнее слово

Мы видели несколько способов обучения модели с помощью sklearn, в частности GridSearchCV. Однако очень, очень важно помнить о компромиссе смещения и дисперсии, а также о компромиссе между вычислительными затратами и показателями оценки. В идеале нам нужна модель с низким смещением и низкой дисперсией, чтобы ограничить общую ошибку, но действительно ли она стоит дополнительного времени выполнения, памяти и т. Д. Только для небольших улучшений? Я позволю тебе ответить на этот вопрос.