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

Какие значения могут принимать предсказания случайного леса?

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

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

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

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

Какие значения могут принимать предсказания случайного леса?

Основное правило

Значения предсказаний случайного леса (Random Forest) зависят от типа задачи:

  • Регрессия: любые вещественные числа (непрерывные значения)
  • Классификация: вероятности классов или метки классов

Случайный лес для регрессии

В задачах регрессии случайный лес предсказывает непрерывные значения. Его предсказание — это среднее арифметическое предсказаний всех деревьев в лесу.

from sklearn.ensemble import RandomForestRegressor
import numpy as np

# Тренировка
rf_reg = RandomForestRegressor(n_estimators=100, random_state=42)
rf_reg.fit(X_train, y_train)

# Предсказания
y_pred = rf_reg.predict(X_test)
print(y_pred)  # Массив вещественных чисел, например:
# [15.23, 42.10, 8.75, 100.5, -5.2, ...]

# Границы зависят от данных обучения
print(f"Минимум: {y_pred.min()}, Максимум: {y_pred.max()}")

Предсказания могут быть как положительными, так и отрицательными, в зависимости от обучающих данных. Если модель видела значения в диапазоне [-100, 500], то предсказания будут примерно в этом диапазоне (но могут немного выходить за границы из-за экстраполяции).

Случайный лес для классификации

В задачах классификации поведение зависит от параметра probability и использованного метода.

1. Вероятности классов (predict_proba)

from sklearn.ensemble import RandomForestClassifier

rf_clf = RandomForestClassifier(n_estimators=100, random_state=42)
rf_clf.fit(X_train, y_train)

# Вероятности для каждого класса
proba = rf_clf.predict_proba(X_test)
print(proba)  # Массив чисел от 0 до 1
# [[0.92, 0.08],    # 92% класс 0, 8% класс 1
#  [0.15, 0.85],
#  [0.50, 0.50]]

# Сумма вероятностей по классам = 1
print(proba.sum(axis=1))  # [1.0, 1.0, 1.0, ...]

2. Метки классов (predict)

# Предсказанные классы (индексы или значения)
predictions = rf_clf.predict(X_test)
print(predictions)  # [0, 1, 1, 0, 1, ...]
print(rf_clf.classes_)  # ['cat', 'dog'] или [0, 1]

Значения соответствуют уникальным классам из обучающей выборки:

# Двухклассовая классификация
y_train = np.array([0, 1, 0, 1, 0])  # Классы: 0, 1
predictions = rf_clf.predict(X_test)  # Только 0 или 1

# Многоклассовая классификация
y_train = np.array(['cat', 'dog', 'bird', 'cat', 'dog'])
rf_clf.fit(X_train, y_train)
predictions = rf_clf.predict(X_test)  # 'cat', 'dog', или 'bird'

Как вычисляются предсказания

Для каждого образца случайный лес:

  1. Передает образец через все деревья решений
  2. Каждое дерево дает свое предсказание
  3. Регрессия: берет среднее арифметическое
  4. Классификация: считает голоса (мода)
# Пример: 5 деревьев в лесу
# Регрессия
# Дерево 1: 15.0
# Дерево 2: 16.5
# Дерево 3: 14.8
# Дерево 4: 15.3
# Дерево 5: 15.4
# Среднее = (15.0 + 16.5 + 14.8 + 15.3 + 15.4) / 5 = 15.4

# Классификация (2 класса)
# Дерево 1: 'cat'
# Дерево 2: 'cat'
# Дерево 3: 'dog'
# Дерево 4: 'cat'
# Дерево 5: 'cat'
# Предсказание = 'cat' (4 голоса против 1)

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

max_depth — глубина деревьев:

# Shallow trees (max_depth=3)
rf_shallow = RandomForestRegressor(max_depth=3)
rf_shallow.fit(X_train, y_train)
# Предсказания более сглаженные, меньше экстремумов

# Deep trees (max_depth=20)
rf_deep = RandomForestRegressor(max_depth=20)
rf_deep.fit(X_train, y_train)
# Предсказания точнее на обучении, но возможен overfitting

n_estimators — количество деревьев:

# Больше деревьев = более стабильные предсказания
# (усреднение большего количества предсказаний)
rf_10 = RandomForestRegressor(n_estimators=10)
rf_1000 = RandomForestRegressor(n_estimators=1000)
# Предсказания rf_1000 обычно более стабильны

Особенности предсказаний Random Forest

  1. Дискретность для регрессии: предсказания не совпадают с обучающими примерами, но часто повторяются (из-за ограниченности деревьев)

  2. Экстраполяция: регрессия случайного леса плохо экстраполирует за границы обучающих данных

  3. Ограничение вероятностей: вероятности всегда в диапазоне [0, 1] и суммируются в 1

  4. Класс с максимальной вероятностью: predict всегда возвращает класс с наибольшей вероятностью (нет неопределенности)

Проверка диапазона предсказаний

# Для регрессии
print(f"Мин: {y_pred.min()}, Макс: {y_pred.max()}")
print(f"Среднее: {y_pred.mean()}, Стд: {y_pred.std()}")

# Для классификации
print(f"Уникальные классы: {np.unique(predictions)}")
print(f"Вероятности от {proba.min():.4f} до {proba.max():.4f}")

Вывод: значения предсказаний случайного леса полностью зависят от типа задачи — для регрессии это непрерывные числа в диапазоне, близком к обучающим данным, а для классификации — либо метки классов, либо вероятности от 0 до 1.

Какие значения могут принимать предсказания случайного леса? | PrepBro