Как вычислить значения в каждом узле в GradientBoostingRegressor для обучения scikit-learn?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как вычислить значения в каждом узле в GradientBoostingRegressor для обучения scikit-learn?

Сообщение Anonymous »

Я пытаюсь вручную вычислить значения, показанные в каждом узле каждого дерева ансамбля, возвращаемого GradientBoostingRegressor.
Итак, вот как я обучаю модель:

Код: Выделить всё

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

from sklearn.datasets import fetch_california_housing
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.tree import plot_tree
from sklearn.model_selection import train_test_split

X, y = fetch_california_housing(return_X_y=True, as_frame=True)
X = X.drop(columns=["Latitude", "Longitude"])

X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=0)

# fit model

gbm = GradientBoostingRegressor(
criterion="squared_error",
n_estimators=2,
max_depth=3,
random_state=3,
)

gbm.fit(X_train, y_train)
Теперь я рисую деревья:

Код: Выделить всё

plt.figure(figsize=(8, 8), dpi=300)

# first tree
plt.subplot(2, 1, 1)
plot_tree(
decision_tree=gbm.estimators_[0][0],
feature_names=X_train.columns.to_list(),
filled=True,  # color the squares
rounded=True,  # round squares
precision = 20,
)
plt.title("First tree")

# second tree
plt.subplot(2, 1, 2)
plot_tree(
decision_tree=gbm.estimators_[1][0],
feature_names=X_train.columns.to_list(),
filled=True,  # color the squares
rounded=True,  # round squares
precision = 20,
)
plt.title("Second tree")

plt.show()
И вот результат:
[img]https://i.sstatic.net /8jc2X.png[/img]

Вопрос в том, как я могу вручную вычислить значение, скажем, первого узла первого, а затем второго дерева?
Я попробовал это, но результат не соответствует значениям на картинке:

Код: Выделить всё

# first node first tree
value = np.mean(y_train - y_train.mean())

# first node second tree
residuals = y_train - 0.1 * gbm.estimators_[0][0].predict(X_train)

np.mean((residuals - np.mean(residuals))

Чего мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/773 ... stingregre
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»