N estimators (Случайный лес)

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

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



n_estimators (от англ. «number of estimators») — один из самых фундаментальных и важных гиперпараметров в алгоритме Случайного леса. Он напрямую определяет размер ансамбля, то есть количество отдельных деревьев решений, которые будут построены и объединены для формирования окончательной модели.

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

Тип данных: Целое положительное число (integer).

Значение по умолчанию в Scikit-learn: 100 (для RandomForestClassifier и RandomForestRegressor).

Содержание

[править] Роль в алгоритме Случайного леса

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

n_estimators напрямую контролирует, сколько таких отдельных «экспертов» (деревьев) будет участвовать в этом коллективном решении.

Каждое из этих n_estimators деревьев строится независимо:

  1. На бутстрэп-выборке данных: Для каждого дерева случайным образом выбирается подмножество обучающих данных с возвращением (бутстрэп-выборка). Это означает, что некоторые исходные образцы могут быть выбраны несколько раз, а некоторые не выбраны вовсе (эти «вне-буферизованные» образцы используются для oob_score).
  2. Случайным подмножеством признаков на каждом узле: При поиске лучшего разбиения на каждом узле дерева алгоритм рассматривает только случайное подмножество доступных признаков (контролируется параметром max_features).

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

[править] Влияние на производительность модели

[править] Точность и обобщающая способность

Уменьшение дисперсии (Variance Reduction):

  • По мере увеличения n_estimators, дисперсия модели (её чувствительность к небольшим изменениям в обучающих данных) уменьшается. Это происходит потому, что Случайный лес усредняет (или голосует) предсказания множества некоррелированных деревьев. Чем больше деревьев, тем более стабильным и надёжным становится это усредненное предсказание.
  • Представьте себе, что вы просите 1000 человек угадать вес предмета. Среднее значение их догадок, скорее всего, будет ближе к истинному весу, чем догадка одного человека. Точно так же, чем больше деревьев, тем лучше ансамбль справляется с шумом и индивидуальными ошибками каждого дерева.
  • Важный момент: В отличие от многих других моделей, которые могут начать переобучаться при увеличении сложности (например, глубокие нейронные сети или очень глубокие одиночные деревья), Случайный лес не переобучается по мере увеличения n_estimators. Вместо этого, его производительность (на валидационном или тестовом наборе) обычно сходится к асимптотическому значению. То есть, после определённого количества деревьев, добавление новых деревьев не приводит к существенному улучшению точности, а лишь стабилизирует её.

Влияние на смещение:

  • n_estimators в первую очередь влияет на дисперсию и очень мало на смещение. Смещение Случайного леса определяется в основном сложностью отдельных деревьев (параметры max_depth, min_samples_leaf и т. д.) и степенью случайности при выборе признаков (max_features).
  • Если отдельные деревья слишком просты (высокое смещение), добавление большего количества таких деревьев не устранит это смещение.

[править] Вычислительные затраты

Время обучения:

  • Время обучения линейно увеличивается с n_estimators. Если обучение одного дерева занимает T времени, то обучение N деревьев займет приблизительно N * T времени.
  • Однако, поскольку каждое дерево обучается независимо, процесс может быть параллелизован (с использованием параметра n_jobs), что значительно сокращает реальное время выполнения на многоядерных процессорах. Тем не менее, общее количество вычислительной работы остаётся линейным.

Время предсказания:

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

Потребление памяти: Объём памяти, необходимый для хранения обученной модели, линейно увеличивается с n_estimators. Каждое обученное дерево должно быть сохранено в памяти. Для очень больших наборов данных или очень глубоких деревьев это может стать значительным ограничением.

[править] Тюнинг

Оптимальное значение n_estimators — это баланс между желаемой точностью и доступными вычислительными ресурсами.

1. Начните с разумного значения: Значение по умолчанию 100 в Scikit-learn часто является хорошей отправной точкой.

2. Мониторинг с помощью OOB-оценки или кросс-валидации:

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

3. Используйте warm_start=True для итеративного обучения: Если вы не уверены в оптимальном количестве деревьев, вы можете начать с небольшого n_estimators и постепенно увеличивать его, используя warm_start=True. Это позволяет добавлять новые деревья к уже обученному лесу, не переобучая его с нуля.

4. Параллелизация (n_jobs): Всегда используйте n_jobs=-1 (или другое подходящее число) для ускорения обучения и предсказания, особенно при больших n_estimators.

Личные инструменты