本文先把xgboost支持的多分类问题的demo写起来,打印出生成的树结构,然后理解xgboost实现多分类问题的原理。这个顺序比较好理解一些。
xgboost 多分类问题 demo
这个demo从xgboost的源代码中就可以看到。在这个位置:/demo/multiclass_classification/train.py。train.py文件里的数据(dermatology.data)可以在 https://archive.ics.uci.edu/ml/machine-learning-databases/dermatology/dermatology.data 这个网址下载。下载下来的文件的后缀是.data,改成 .csv 或者 .txt 就可以直接用了。我把数据改成了 'data.txt' 。
现在来看看train.py 里的代码吧~
我把代码直接写在下边:这份数据的标签有6类,下边的代码我设置迭代了2轮。
import numpy as np
import xgboost as xgb
# label need to be 0 to num_class -1
data = np.loadtxt('data.txt', delimiter='\t',
converters={33: lambda x:int(x == '?'), 34: lambda x:int(x) - 1})
sz = data.shape
train = data[:int(sz[0] * 0.7), :]
test = data[int(sz[0] * 0.7):, :]
train_X = train[:, :33]
train_Y = train[:, 34]
test_X = test[:, :33]
test_Y = test[:, 34]
xg_train = xgb.DMatrix(train_X, label=train_Y)
xg_test = xgb.DMatrix(test_X, label=test_Y)
# setup parameters for xgboost
param = {}
# use softmax multi-class classification
param['objective'] = 'multi:softmax'
# scale weight of