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

Как работает деревянный регрессор?

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

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

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

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

Как работает Decision Tree Regressor (Регрессор на основе решающего дерева)

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

Основной процесс обучения

Алгоритм работает по принципу "жадного" разбиения:

  1. Начало: все данные в корневом узле
  2. На каждом узле алгоритм пытается найти лучшее разбиение:
    • Проверяет все признаки
    • Проверяет все возможные пороги разбиения
    • Выбирает разбиение, которое минимизирует функцию ошибки
  3. Рекурсивно повторяет процесс для левого и правого поддеревьев
  4. Останавливается, когда:
    • Достигнута максимальная глубина
    • В узле осталось слишком мало примеров
    • Невозможно улучшить ошибку

Критерий качества разбиения

Для регрессии используется Mean Squared Error (MSE) или Mean Absolute Error (MAE):

from sklearn.tree import DecisionTreeRegressor

model = DecisionTreeRegressor(criterion='squared_error', max_depth=5)
model.fit(X_train, y_train)

Для каждого возможного разбиения вычисляется улучшение (gain):

Gain = MSE_parent - (N_left/N_parent * MSE_left + N_right/N_parent * MSE_right)

Пример работы

Предположим, нужно предсказать цену квартиры (y) по площади (x1) и возрасту (x2):

Узел 1 (все данные): средняя цена = 3,000,000
  ├─ Разбиение: если площадь <= 60 м²
  │   ├─ Левый узел (площадь <= 60): средняя цена = 1,500,000
  │   └─ Правый узел (площадь > 60): средняя цена = 5,000,000
  │       ├─ Разбиение: если возраст <= 10 лет
  │       │   ├─ Цена = 5,500,000
  │       │   └─ Цена = 4,500,000

Предсказание

Для новой точки алгоритм проходит от корня к листу, следуя условиям разбиения:

X_new = [[65, 8]]  # площадь 65 м², возраст 8 лет
y_pred = model.predict(X_new)  # возвращает значение листа

Код реализации

from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np

# Создание модели
dt = DecisionTreeRegressor(
    max_depth=5,           # максимальная глубина
    min_samples_split=5,   # минимум примеров для разбиения
    min_samples_leaf=2,    # минимум примеров в листе
    random_state=42
)

# Обучение
dt.fit(X_train, y_train)

# Предсказание
y_pred = dt.predict(X_test)

# Оценка
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, y_pred)

print(f"RMSE: {rmse:.2f}")
print(f"R²: {r2:.3f}")

Визуализация дерева

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

plt.figure(figsize=(20, 10))
plot_tree(dt, feature_names=['area', 'age'], filled=True)
plt.show()

Преимущества и недостатки

Преимущества:

  • Интерпретируемость — можно увидеть, как работает модель
  • Не требует нормализации признаков
  • Работает с нелинейными зависимостями
  • Быстро

Недостатки:

  • Склонен к переобучению при большой глубине
  • Неустойчив — малые изменения данных приводят к другому дереву
  • Может работать хуже на новых данных

Регуляризация

Чтобы избежать переобучения, ограничивайте:

dt = DecisionTreeRegressor(
    max_depth=5,              # не глубже 5 уровней
    min_samples_split=10,     # минимум 10 примеров для разбиения
    min_samples_leaf=5,       # минимум 5 примеров в листе
    max_features='sqrt'       # проверять только sqrt(n_features) признаков
)

Когда использовать

  • Когда нужна интерпретируемость
  • Когда есть нелинейные зависимости
  • Когда признаки имеют разные масштабы
  • Как базовый алгоритм для ансамблей (Random Forest, Gradient Boosting)

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

Как работает деревянный регрессор? | PrepBro