Gradient Boosting Classifier — это известная ансамблевая модель, разработанная в различных библиотеках, таких как Sklearn и XGBoost.

| kaggle | GitHub| Купить кофе |

Базовым учеником в модели Sklearn является дерево регрессора решений, которое имеет свои атрибуты. После обучения модели вы также можете использовать базовые методы обучения.
Во-первых, мы должны импортировать модель и обучить ее на наборе данных.

Далее я использовал предопределенный набор данных из библиотеки Sklearn.

import sklearn.datasets as dt
X, y = dt.load_iris(return_X_y=True)

Для обучения модели и ее оценки можно использовать метод стратифицированной выборки, чтобы иметь одинаковое распределение как в обучающей, так и в тестовой партиях.

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

Теперь пришло время построить модель повышения градиента из библиотеки Sklearn.

from sklearn.ensemble import GradientBoostingClassifier
model = GradientBoostingClassifier()
model.fit(x_train, y_train)
model.score(x_test, y_test)

Поскольку основное внимание в этом обзоре уделяется базовому обучению, а не обучению процесса модели ML, я использовал гиперпараметры по умолчанию и обучил его просто на обучающем пакете и протестировал его в тесте.

Дерево

Итак, где же базовые ученики и их атрибуты? Для этого примера у нас есть (100, 3) деревьев, что означает 100 деревьев для каждой метки класса. Итак, как проверить дерево? Вы можете видеть, что все деревья сохраняются в следующем методе.

model.estimators_
print(model.estimators_.shape)
>>> (100, 3)

Первое дерево для первоклассной метки:

model.estimators_[0][0]
>>> DecisionTreeRegressor(criterion='friedman_mse', max_depth=3,                       random_state=RandomState(MT19937) at 0x21628DFAA40)

.tree_ возвращает обученное дерево

model.estimators_[0][0].tree_
>>> <sklearn.tree._tree.Tree at 0x2166c7c2f80>

Нарисуй дерево

Вы также можете нарисовать свое дерево с помощью следующего кода

from sklearn.tree import plot_tree
tree = model.estimators_.reshape(-1)[1]
plot_tree(tree)

Листья

Другой вопрос, который вы можете задать, касается количества листьев.
Ваш ответ — следующий код.

tree.tree_.n_leaves
>>> 5

Сумма всех листьев будет

print(sum(tree.tree_.n_leaves for tree in model.estimators_.reshape(-1)))

Ценность дерева

Возврат значения дерева с помощью следующего кода

tree = model.estimators_[1][0]
tree.tree_.value
>>> array([[[-3.09980500e-05]],         [[ 1.61886012e+00]],         [[-3.06927659e-01]],         [[-3.08667222e-01]],         [[-9.63116480e-01]],         [[-9.82423324e-01]],         [[-3.05809369e-01]],         [[-9.62883563e-01]],         [[-9.59686381e-01]]])

Точно так же мы знаем, что у нас девять узлов, и вы также можете это посчитать.

tree.node_count

Далее я сохранил значения, общее количество узлов, правые и левые дочерние узлы, признаки и корневые узлы для первого дерева первого класса.

tree = model.estimators_[0, 0].tree_
values = tree.value
nodes = tree.node_count
left_child = tree.children_left
right_child = tree.children_right
feature = tree.feature

Поддержать автора

Чтобы поддержать Автора, вы можете купить ему кофе.

| Купить кофе |