Какие значения могут принимать предсказания случайного леса?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Какие значения могут принимать предсказания случайного леса?
Основное правило
Значения предсказаний случайного леса (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'
Как вычисляются предсказания
Для каждого образца случайный лес:
- Передает образец через все деревья решений
- Каждое дерево дает свое предсказание
- Регрессия: берет среднее арифметическое
- Классификация: считает голоса (мода)
# Пример: 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
-
Дискретность для регрессии: предсказания не совпадают с обучающими примерами, но часто повторяются (из-за ограниченности деревьев)
-
Экстраполяция: регрессия случайного леса плохо экстраполирует за границы обучающих данных
-
Ограничение вероятностей: вероятности всегда в диапазоне [0, 1] и суммируются в 1
-
Класс с максимальной вероятностью:
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.