← Назад к вопросам

Как устроен Random Forest?

1.8 Middle🔥 191 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как устроен Random Forest?

Общее описание

Random Forest (Случайный лес) — это ансамблевый алгоритм машинного обучения, который строит множество независимых деревьев решений и объединяет их предсказания для повышения точности и снижения переобучения. Это один из самых популярных и практически полезных алгоритмов в машинном обучении.

Архитектура Random Forest

1. Ансамбль деревьев решений

  • Random Forest состоит из N деревьев решений (обычно 100-1000)
  • Каждое дерево обучается независимо
  • Для регрессии используется усреднение предсказаний
  • Для классификации используется голосование большинства

2. Bootstrap (бутстрэп) выборка

# При обучении каждого дерева используется случайная выборка
# с повторениями из исходного датасета
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)

# bootstrap=True — используется случайная выборка
rf = RandomForestClassifier(n_estimators=100, bootstrap=True, random_state=42)
rf.fit(X, y)

3. Случайный выбор признаков

  • На каждом узле дерева для разделения выбирается случайное подмножество признаков
  • Обычно используется sqrt(n_features) или log2(n_features)
  • Это добавляет разнообразие между деревьями

Процесс обучения

# Пример обучения Random Forest
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
import numpy as np

# Подготовка данных
X = np.random.randn(1000, 20)
y = X[:, 0] + 2 * X[:, 1] + np.random.randn(1000) * 0.1

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# Создание и обучение модели
rf = RandomForestRegressor(
    n_estimators=100,      # Количество деревьев
    max_depth=10,          # Максимальная глубина
    min_samples_split=5,   # Минимум образцов для разделения
    random_state=42
)
rf.fit(X_train, y_train)

# Предсказание
y_pred = rf.predict(X_test)
print(f"R² Score: {rf.score(X_test, y_test):.3f}")

Ключевые преимущества

1. Устойчивость к переобучению

  • Ансамбль деревьев снижает дисперсию
  • Каждое дерево видит разные подмножества данных

2. Важность признаков

# Random Forest автоматически вычисляет важность признаков
feature_importance = rf.feature_importances_
for i, importance in enumerate(feature_importance):
    print(f"Признак {i}: {importance:.4f}")

3. Параллелизм

  • Деревья обучаются независимо и могут обучаться в параллель
rf = RandomForestClassifier(n_jobs=-1)  # Использует все ядра процессора

4. Работает с нелинейными зависимостями

  • Не требует предварительной нормализации признаков
  • Автоматически обнаруживает взаимодействия признаков

Гиперпараметры

Основные гиперпараметры:

  • n_estimators — количество деревьев (больше = лучше, но медленнее)
  • max_depth — максимальная глубина дерева
  • min_samples_split — минимальное количество образцов для разделения узла
  • min_samples_leaf — минимальное количество образцов в листе
  • max_features — количество признаков для рассмотрения в каждом узле

Out-of-Bag (OOB) ошибка

# Random Forest использует примерно 1/3 данных для оценки
rf = RandomForestClassifier(oob_score=True, random_state=42)
rf.fit(X_train, y_train)
print(f"OOB Score: {rf.oob_score_:.3f}")

Образцы, не попавшие в bootstrap выборку, используются для оценки качества без отдельного тестового набора.

Недостатки

  • Интерпретируемость хуже, чем у одного дерева
  • Может быть медленным на больших датасетах
  • Склонен к смещению при сильно дисбалансированных классах

Заключение

Random Forest — это надежный и мощный алгоритм, который часто используется как базовое решение для задач классификации и регрессии благодаря своей эффективности и устойчивости к переобучению.

Как устроен Random Forest? | PrepBro