0Pricing
Learn AI with Python · Урок

Случайные леса и бэггинг

Концепция ансамблей, RandomForestClassifier, n_estimators, важность признаков и оценка OOB.

«Случайные леса и бэггинг» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Проблема одиночных деревьев

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

Бэггинг (агрегирование бутстрэп-выборок)

Бэггинг обучает множество моделей на разных бутстрэп-выборках данных (случайных выборках с возвращением), а затем усредняет их прогнозы.

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

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

bag = BaggingClassifier(
    estimator=DecisionTreeClassifier(),
    n_estimators=100,
    random_state=0,
)
bag.fit(Xtr, ytr)

От бэггинга к случайным лесам

Случайный лес — это бэггинг деревьев с одним дополнительным приёмом: при каждом разбиении рассматривается только случайное подмножество признаков.

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

Основы RandomForestClassifier

Используйте RandomForestClassifier. Ключевой параметр n_estimators задаёт число строящихся деревьев. Большее число деревьев повышает стабильность, но замедляет работу.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(n_estimators=200, random_state=0)
rf.fit(Xtr, ytr)
print("Accuracy:", rf.score(Xte, yte))

Параллельное обучение с n_jobs

Деревья в лесу независимы, поэтому они обучаются параллельно. Установите n_jobs=-1, чтобы задействовать все ядра CPU и значительно ускорить обучение.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=500,
    n_jobs=-1,        # use all cores
    random_state=0,
)
rf.fit(Xtr, ytr)

Оценка вне выборки (OOB)

Каждое дерево не использует примерно треть образцов, поскольку бутстрэп-выборка их не выбрала. Эти вневыборочные образцы образуют встроенный набор для проверки.

Установите oob_score=True, чтобы получить дополнительную оценку ошибки обобщения без отдельного разбиения данных.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=300,
    oob_score=True,
    random_state=0,
)
rf.fit(Xtr, ytr)
print("OOB score:", rf.oob_score_)

Управление глубиной деревьев в лесу

Применяются те же параметры дерева: max_depth, min_samples_leaf и max_features (число признаков, проверяемых при каждом разбиении).

max_features="sqrt" — распространённое значение по умолчанию для классификации.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=300,
    max_depth=12,
    max_features="sqrt",
    random_state=0,
)

Встроенная важность признаков

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

from sklearn.ensemble import RandomForestClassifier
import numpy as np

rf = RandomForestClassifier(n_estimators=200, random_state=0).fit(Xtr, ytr)
order = np.argsort(rf.feature_importances_)[::-1]
for i in order[:5]:
    print(i, rf.feature_importances_[i])

Важность перестановок

Важность перестановок надёжнее: она перемешивает один столбец признаков и измеряет, насколько уменьшается score. Большое уменьшение означает, что признак был важен.

Этот метод не зависит от модели и позволяет избежать смещения, связанного с нечистотой.

from sklearn.inspection import permutation_importance

result = permutation_importance(
    rf, Xte, yte, n_repeats=10, random_state=0, n_jobs=-1
)
print(result.importances_mean)

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

permutation_importance возвращает importances_mean и importances_std по результатам повторений. Вычисляйте важность на отложенной выборке, чтобы измерять влияние на обобщение, а не качество подгонки на обучающих данных.

import numpy as np

means = result.importances_mean
stds = result.importances_std
for i in np.argsort(means)[::-1]:
    print(f"feature {i}: {means[i]:.3f} +/- {stds[i]:.3f}")

Когда использовать случайные леса

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

Быстрая проверка

Проверьте, насколько Вы поняли бэггинг и случайные леса.

Итоги

Итоги: Бэггинг обучает модели на бутстрэп-выборках и усредняет их, уменьшая дисперсию. Случайные леса добавляют случайные подмножества признаков при каждом разбиении. Настраивайте их с помощью n_estimators, используйте n_jobs=-1 для ускорения, получайте дополнительную проверку с помощью oob_score и отдавайте предпочтение permutation_importance вместо важности на основе нечистоты для надёжного ранжирования признаков.

Часто задаваемые вопросы

Урок «Случайные леса и бэггинг» бесплатный?

Да — полный текст урока «Случайные леса и бэггинг» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Случайные леса и бэггинг»?

Концепция ансамблей, RandomForestClassifier, n_estimators, важность признаков и оценка OOB. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Случайные леса и бэггинг»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Деревья решений: теория и реализация
  2. Случайные леса и бэггинг
  3. Градиентный бустинг: GBM и XGBoost
  4. LightGBM и CatBoost
← Назад к Learn AI with Python