2016-09-08 6 views
1

Каждый раз, когда я использовал xgboost (не только с python), обучающие сообщения всегда включают «обрезанные узлы» в каждой строке. Например:Вывести что-то, кроме «0 обрезанных узлов»

import pandas as pd 
from sklearn import datasets 
import xgboost as xgb 
iris = datasets.load_iris() 
dtrain = xgb.DMatrix(iris.data, label = iris.target) 
params = {'max_depth': 10, 'min_child_weight': 0, 'gamma': 0, 'lambda': 0, 'alpha': 0} 
bst = xgb.train(params, dtrain) 

Выход включает в себя длинный список инструкций, как

[11:08:18] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 16 extra nodes, 0 pruned nodes, max_depth=5 

Я играл с несколькими комбинациями параметров настройки, но я всегда получаю сообщение «0 обрезки узлов». Как я могу создать ситуацию, когда я получаю некоторые обрезанные узлы?

+0

Вы пытались увеличить min_child_weight до большого количества? Скажем, 10% от количества образцов в вашем наборе данных? –

ответ

0

У вас будут обрезанные узлы с использованием регуляризации! Используйте параметр gamma!

Целевые функции включают в себя две части: потерю тренировки и регуляризацию. Регуляризация в XGBoost контролируется тремя параметрами: alpha, lambda и gamma (doc):

альфа [по умолчанию = 0] L1 регуляризации термина на весах, увеличить это значение сделает модель более консервативным.

lambda [default = 1] L2 регулировка срока на весах, увеличение этого значения сделает модель более консервативной.

гамма [по умолчанию = 0] минимальное сокращение потерь, необходимое для создания следующего раздела на листовом узле дерева. чем больше, тем более консервативным будет алгоритм . Диапазон: [0, ∞]

alpha и beta просто L1 и L2 штрафы на весах и не должны влиять на обрезку.

BUT gamma - параметр, который необходимо настроить для обрезания узлов. Вы должны увеличить его, чтобы получить обрезанные узлы. Следите за тем, что он зависит от целевой функции и что для получения обрезанных узлов может потребоваться значение, достигающее 10000 или более. Настройка гаммы великолепна! это позволит XGBoost сходиться! что после определенного количества итераций оценка обучения и тестирования не изменится в следующих итерациях (все узлы новых деревьев будут обрезаны). В конце это отличный переключатель для управления надстройкой!

См. Introduction to Boosted Trees для получения точного определения gamma.