Гиперпараметры Случайного леса

Материал из Documentation.

Перейти к: навигация, поиск



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

Содержание

[править] Гиперпараметры

[править] Параметры, контролирующие размер и количество ансамблей

n_estimators (integer, default=100):

  • Назначение: Определяет количество деревьев решений в лесу.
  • Детали: Чем больше деревьев, тем более стабильными и надёжными становятся предсказания, поскольку эффект усреднения/голосования сглаживает индивидуальные ошибки отдельных деревьев. Однако, после определённого порога прирост точности становится незначительным, а время обучения и предсказания, а также потребление памяти, увеличиваются линейно с n_estimators.
  • Влияние:
    • Увеличение: Снижает дисперсию модели (уменьшает переобучение), повышает стабильность. Увеличивает время обучения и потребление памяти.
    • Уменьшение: Увеличивает дисперсию, снижает стабильность. Уменьшает время обучения и потребление памяти.
  • Рекомендации по тюнингу: Начните с 100—200. Постройте график зависимости метрики качества (например, OOB-оценки) от n_estimators, чтобы найти точку, где прирост точности замедляется.

bootstrap (boolean, default=True):

  • Назначение: Определяет, использовать ли бутстрэп-выборки (выборки с возвращением) при построении каждого дерева.
  • Детали: Если True, каждое дерево обучается на случайной выборке данных с возвращением, что является ключевым элементом бэггинга и обеспечивает разнообразие деревьев. Если False, каждое дерево обучается на всем исходном наборе данных, что делает деревья более похожими и увеличивает корреляцию между ними, тем самым снижая преимущества ансамбля. В этом случае это будет просто «лес» из деревьев решений, а не «случайный лес» в полном смысле.
  • Влияние:
    • True (по умолчанию): Снижает дисперсию, улучшает обобщающую способность, позволяет использовать OOB-оценку.
    • False: Увеличивает дисперсию, может привести к переобучению, OOB-оценка недоступна.
  • Рекомендации по тюнингу: Почти всегда оставляйте True. Изменение на False — очень редкий случай, когда вы сознательно хотите уменьшить случайность и проверить эффект.

oob_score (boolean, default=False):

  • Назначение: Определяет, использовать ли «вне-буферизованные» (Out-of-Bag, OOB) образцы для оценки обобщающей способности модели.
  • Детали: При использовании бутстрэп-выборок для обучения каждого дерева, примерно 37 % исходных обучающих образцов не попадают в выборку для данного дерева. Эти «вне-буферизованные» образцы можно использовать для оценки производительности дерева, а затем усреднить эти оценки по всем деревьям. OOB-оценка является несмещенной оценкой ошибки обобщения и может служить заменой кросс-валидации.
  • Влияние:
    • True: Позволяет получить внутреннюю оценку качества модели без необходимости выделения отдельного валидационного набора или выполнения кросс-валидации. Увеличивает время обучения незначительно.
    • False: Не рассчитывает OOB-оценку.
  • Рекомендации по тюнингу: Установите True во время тюнинга гиперпараметров, чтобы быстро оценить изменения производительности.

[править] Параметры, контролирующие структуру отдельных деревьев

Эти параметры во многом совпадают с параметрами обычного DecisionTreeClassifier или DecisionTreeRegressor. Они контролируют, насколько «глубоким» или «сложным» может быть каждое отдельное дерево.

max_features (string, int or float, default="sqrt" для классификации, «1.0» для регрессии):

  • Назначение: Определяет количество признаков, которые случайным образом выбираются для рассмотрения при поиске лучшего разбиения на каждом узле дерева. Это ключевой параметр, обеспечивающий случайность и разнообразие деревьев в лесу.
  • Детали:
    • int: Использует max_features признаков.
    • float: Использует max_features * n_features признаков (процент от общего числа признаков).
    • «auto» / «sqrt»: sqrt(n_features) признаков. Это значение по умолчанию для классификации.
    • «log2»: log2(n_features) признаков.
    • «1.0»: Использует все n_features признаков. Это значение по умолчанию для регрессии в некоторых версиях, но чаще рекомендуется P/3 или max_features=1.0 (что эквивалентно бэггингу деревьев без случайности признаков).
  • Влияние:
    • Меньшее значение (sqrt, log2): Увеличивает разнообразие деревьев, снижает корреляцию между ними, что обычно снижает дисперсию ансамбля. Может увеличить смещение, если оптимальный признак для разбиения часто исключается. Ускоряет обучение.
    • Большее значение (1.0, auto в старых версиях): Деревья становятся более похожими (коррелированными), что может увеличить дисперсию ансамбля. Может снизить смещение, если позволяет деревьям использовать наиболее информативные признаки. Замедляет обучение.
  • Рекомендации по тюнингу:
    • Для классификации: sqrt (или auto) обычно является хорошим стартом.
    • Для регрессии: 1.0 (все признаки) или P/3 (где P — общее количество признаков) часто используются как отправные точки.
    • Экспериментируйте с разными значениями, чтобы найти оптимальный баланс.

max_depth (integer or None, default=None):

  • Назначение: Определяет максимальную глубину каждого дерева в лесу.
  • Детали: Если None, узлы расширяются до тех пор, пока все листья не станут чистыми (для классификации) или пока не достигнут минимального количества выборок для разбиения (min_samples_split). Глубокие деревья склонны к переобучению на обучающих данных.
  • Влияние:
    • None (глубокие деревья): Каждое отдельное дерево будет сильно переобучено, но ансамбль Random Forest обычно хорошо справляется с этим благодаря усреднению. Может привести к очень сложным моделям и долгому обучению.
    • Ограниченная глубина (например, 5-10): Уменьшает сложность отдельных деревьев, что может увеличить смещение, но снизить дисперсию. Ускоряет обучение и уменьшает потребление памяти.
  • Рекомендации по тюнингу: Для Random Forest часто оставляют None, полагаясь на другие параметры для контроля переобучения. Если модель всё ещё переобучается или обучение слишком медленное/требует много памяти, попробуйте ограничить max_depth.

min_samples_split (integer or float, default=2):

  • Назначение: Минимальное количество выборок, необходимых для разбиения внутреннего узла.
  • Детали: Если количество выборок в узле меньше этого значения, узел не будет разбит, и станет листом.
  • Влияние:
    • Большее значение: Предотвращает создание слишком специфичных (переобученных) узлов и ветвей, увеличивает смещение, уменьшает дисперсию.
    • Меньшее значение (например, 2): Позволяет деревьям быть более гибкими и потенциально переобучаться.
  • Рекомендации по тюнингу: Увеличивайте, чтобы уменьшить переобучение, но не слишком сильно, чтобы не вызвать недообучение.

min_samples_leaf (integer or float, default=1):

  • Назначение: Минимальное количество выборок, которые должны находиться в конечном узле (листе).
  • Детали: Разбиение будет разрешено только в том случае, если оно не приведёт к созданию листа, содержащего меньше выборок, чем min_samples_leaf.
  • Влияние:
    • Большее значение: Гарантирует, что каждый лист представляет достаточное количество данных, что уменьшает переобучение и увеличивает смещение.
    • Меньшее значение (например, 1): Позволяет создавать листы, представляющие всего один образец, что может привести к сильному переобучению.
  • Рекомендации по тюнингу: Увеличивайте, чтобы уменьшить переобучение. Часто min_samples_leaf более эффективен для контроля переобучения, чем min_samples_split.

min_weight_fraction_leaf (float, default=0.0):

  • Назначение: Минимальная взвешенная доля от общего числа выборок (или их весов), которая должна быть в конечном узле (листе).
  • Детали: Похож на min_samples_leaf, но учитывает веса выборок (sample_weight). Если веса выборок не используются, он эквивалентен min_samples_leaf (с учётом общего количества выборок).
  • Влияние: Аналогично min_samples_leaf, но с учетом весов.
  • Рекомендации по тюнингу: Редко используется, если только вы не работаете с взвешенными выборками.

max_leaf_nodes (integer or None, default=None):

  • Назначение: Определяет максимальное количество листовых узлов в дереве.
  • Детали: Ограничивает количество конечных узлов. Если None, количество листовых узлов не ограничено.
  • Влияние: Альтернативный способ контроля сложности дерева, похожий на max_depth. Меньшее количество листовых узлов означает более простое дерево, что увеличивает смещение и уменьшает дисперсию.
  • Рекомендации по тюнингу: Обычно используется либо max_depth, либо max_leaf_nodes, но не оба одновременно.

min_impurity_decrease (float, default=0.0):

  • Назначение: Узел будет разбит, если это разбиение приводит к уменьшению неопределённости (impurity) большему или равному этому значению.
  • Детали: Пороговое значение для «качества» разбиения. Если разбиение не улучшает качество достаточно сильно, оно не будет выполнено.
  • Влияние: Большее значение приводит к более агрессивной обрезке дерева (pruning), увеличивает смещение, уменьшает дисперсию.
  • Рекомендации по тюнингу: Может быть полезен для тонкой настройки сложности дерева.

[править] Параметры, определяющие критерий разбиения

criterion (string, default="gini" для классификации, «squared_error» для регрессии)

  • Назначение: Функция, используемая для измерения качества разбиения.
  • Детали:
    • Для классификации:
      • «gini» (Gini impurity): Мера вероятности неправильного классифицирования случайно выбранного элемента, если он помечен случайным образом в соответствии с распределением меток в узле. Обычно немного быстрее, чем энтропия.
      • «entropy» (Information Gain): Мера уменьшения неопределённости после разбиения.
    • Для регрессии:
      • «squared_error» (Mean Squared Error, MSE): Среднеквадратичная ошибка, уменьшение которой является целью при разбиении. Это эквивалент `mse` из старых версий.
      • «absolute_error» (Mean Absolute Error, MAE.): Средняя абсолютная ошибка. Менее чувствительна к выбросам, чем MSE.
      • «poisson»: Используется для задач, где целевая переменная представляет собой счёт (count data), предполагая распределение Пуассона.
  • Влияние: Выбор критерия может слегка влиять на структуру дерева и, следовательно, на производительность. На практике разница между `gini` и `entropy` для классификации часто минимальна.
  • Рекомендации по тюнингу: Обычно оставляют значения по умолчанию (`gini` для классификации, `squared_error` для регрессии), так как они хорошо работают в большинстве случаев. Можете попробовать `entropy` или `absolute_error`, если дефолтные варианты не дают желаемых результатов.

[править] Другие параметры

random_state (integer or RandomState instance, default=None):

  • Назначение: Контролирует генератор случайных чисел, используемый для бутстрэп-выборок при построении каждого дерева, а также для выбора признаков на каждом узле.
  • Детали: Если вы зададите фиксированное целое число, то каждый раз при запуске кода с теми же данными и гиперпараметрами вы будете получать абсолютно одинаковые результаты. Это критически важно для воспроизводимости экспериментов.
  • Влияние: Обеспечивает воспроизводимость.
  • Рекомендации по тюнингу: Всегда устанавливайте фиксированное целое число (например, 42) для отладки и сравнения моделей.

n_jobs (integer, default=None):

  • Назначение: Количество ядер CPU, которые будут использоваться для параллельного выполнения задач (обучение и предсказание).
  • Детали:
    • None: Используется 1 ядро.
    • 1: Используется 1 ядро.
    • −1: Используются все доступные ядра CPU.
    • int > 1: Используется указанное количество ядер.
  • Влияние: Значительно ускоряет обучение и предсказание, особенно для больших n_estimators и/или больших наборов данных.
  • Рекомендации по тюнингу: Устанавливайте «-1» для максимального использования ресурсов, если это не мешает другим процессам на вашей машине.

verbose (integer, default=0):

  • Назначение: Управляет уровнем детализации вывода во время обучения и предсказания.
  • Детали:
    • 0: Без вывода.
    • 1: Выводит сообщения о ходе обучения.
    • 2: Выводит более подробные сообщения.
  • Влияние: Полезно для отслеживания прогресса на длительных тренировках.
  • Рекомендации по тюнингу: Установите 1 или 2 для мониторинга.

warm_start (boolean, default=False):

  • Назначение: Если `True`, позволяет повторно использовать решение предыдущего вызова `fit` и добавлять больше деревьев к ансамблю.
  • Детали: Полезно, если вы хотите постепенно увеличивать n_estimators без необходимости переобучать весь лес с нуля.
  • Влияние: Может сэкономить время при итеративном увеличении n_estimators.
  • Рекомендации по тюнингу: Используйте, если вы планируете постепенно добавлять деревья к уже обученной модели.

class_weight (dict, list of dicts, «balanced», «balanced_subsample» or None, default=None):

  • Только для классификации.
  • Назначение: Веса, связанные с классами. Используется для работы с несбалансированными наборами данных, где некоторые классы представлены гораздо реже, чем другие.
  • Детали:
    • None: Все классы имеют вес 1.
    • «balanced»: Автоматически регулирует веса классов обратно пропорционально частоте их появления в данных.
    • «balanced_subsample»: То же, что и «balanced», но веса вычисляются на основе бутстрэп-выборки для каждого дерева, а не всего набора данных.
    • dict: Пользовательский словарь весов {class_label: weight}.
  • Влияние: Увеличивает важность миноритарных классов, помогая модели лучше их распознавать, что может увеличить Recall для этих классов, но потенциально снизить общую точность.
  • Рекомендации по тюнингу: Используйте «balanced» или «balanced_subsample» при работе с несбалансированными данными.

ccp_alpha (non-negative float, default=0.0):

  • Назначение: Параметр сложности, используемый для минимально-стоимостной обрезки (Minimal Cost-Complexity Pruning).
  • Детали: Любая ветвь, которая приводит к уменьшению нечистоты (impurity) меньше, чем ccp_alpha, будет обрезана. Чем больше ccp_alpha, тем сильнее обрезаются деревья.
  • Влияние: Более высокие значения ccp_alpha приводят к меньшим деревьям, что увеличивает смещение и уменьшает дисперсию. Это форма пост-обрезки.
  • Рекомендации по тюнингу: Обычно не является основным параметром для тюнинга Random Forest, так как ансамбль сам по себе хорошо справляется с переобучением отдельных деревьев. Однако, может быть полезен в некоторых случаях для дальнейшего упрощения деревьев.
Личные инструменты