在XGBoost中为分类设置应用增量学习时出错(python)

时间:2018-03-07 14:09:29

标签: python-3.x classification xgboost

Python版本:3.5 // xgboost版本:0.7.post3

大家好,

我正在尝试使用python中的 xgboost模块来实现增量学习,其中我的目标变量是二进制。我想我应该设置参数“process_type”:“update”。问题是我得到了一个我无法解决的错误。在这里,我使用来自sklearn的乳腺癌数据集对我的代码进行了示例实现,以便每个人都可以尝试一下。有谁知道如何防止发生以下错误?

from sklearn import datasets
import xgboost

X_all = datasets.load_breast_cancer().data
y_all = datasets.load_breast_cancer().target

X_first_half = X_all[0:280,:]
X_second_half = X_all[280:,:]
y_first_half = y_all[0:280]
y_second_half = y_all[280:]

model1 = xgboost \
    .train({'objective': 'binary:logistic'},
           dtrain=xgboost.DMatrix(X_first_half, y_first_half),
           xgb_model=None)

model2 = xgboost \
    .train({'objective': 'binary:logistic',
            'process_type': 'update',
            'update': 'refresh',
            'refresh_leaf': True},
           dtrain=xgboost.DMatrix(X_second_half, y_second_half),
           xgb_model=model1)

我得到的错误是:

XGBoostError: b'[15:03:03] src/tree/updater_colmaker.cc:118:
Check failed: tree.param.num_nodes == tree.param.num_roots (19 vs. 1)
ColMaker: can only grow new tree\n\nStack trace returned 1 entries:\n[bt] (0)

1 个答案:

答案 0 :(得分:0)

我认为他正在努力实现一种批量训练,我的意思是用新的数据点进一步训练模型,而不需要为整体添加更多的树。换句话说,将当前树/叶子更新为新数据点。

来自文档:

  

process_type,[default ='default']

     

一种运行的提升过程。     选择:{'默认','更新'}         'default':创建新树的正常提升过程。         'update':从现有模型开始,仅更新其树。在每次增强迭代中,从初始模型中获取树,为该树运行指定的更新器插件序列,并将修改后的树添加到新模型中。新模型将具有相同或更少数量的树,具体取决于执行的增强迭代次数。目前,以下内置更新程序插件可以有意义地与此进程类型一起使用:'refresh','prune'。使用'update',不能使用创建新树的更新程序插件。