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
Поддержать автора
Чтобы поддержать Автора, вы можете купить ему кофе.
| Купить кофе |