XGBooST详解:
1.数据格式
XGBoost可以加载多种数据格式的训练数据:
libsvm 格式的文本数据;
Numpy 的二维数组;
XGBoost 的二进制的缓存文件。加载的数据存储在对象 DMatrix 中。
下面一一列举:
加载numpy的数组
>>> data = np.random.rand(5,10) # 5 entities, each contains 10 features
>>> label = np.random.randint(2, size=5) # binary target
>>> dtrain = xgb.DMatrix( data, label=label)
将scipy.sparse格式的数据转化为 DMatrix 格式
>>> csr = scipy.sparse.csr_matrix( (dat, (row,col)) ) >>> dtrain = xgb.DMatrix( csr )
将 DMatrix 格式的数据保存成XGBoost的二进制格式,在下次加载时可以提高加载速度,使用方式如下
>>> dtrain = xgb.DMatrix('train.svm.txt')
>>> dtrain.save_binary("train.buffer")
当需要给样本设置权重时,可以用如下方式
>>> w = np.random.rand(5,1)
>>> dtrain = xgb.DMatrix( data, label=label, missing = -999.0, weight=w)
2.参数设置
XGBoost使用key-value字典的方式存储参数:
params = {
'booster': 'gbtree', 'objective': 'multi:softmax', # 多分类的问题 'num_class': 10, # 类别数,与 multisoftmax 并用
'gamma': 0.1, # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2这样子。
'max_depth': 12, # 构建树的深度,越大越容易过拟合 'lambda': 2, # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
'subsample': 0.7, # 随机采样训练样本
'colsample_bytree': 0.7, # 生成树时进行的列采样 'min_child_weight': 3, 'silent': 1, # 设置成1则没有运行信息输出,最好是设置为0.
'eta': 0.007, # 如同学习率
'seed': 1000, 'nthread': 4, # cpu 线程数}
3.训练模型
有了参数列表和数据就可以训练模型了
num_round = 10
bst = xgb.train( plst, dtrain, num_round, evallist )
4.模型预测
# X_test类型可以是二维List,也可以是numpy的数组
dtest = DMatrix(X_test) ans = model.predict(dtest)
5.保存模型
bst.save_model('test.model')
你可以导出模型到txt文件并浏览模型的含义:
# dump model
bst.dump_model('dump.raw.txt')
# dump model with feature map
bst.dump_model('dump.raw.txt','featmap.txt')
6.加载模型
通过如下方式可以加载模型:
bst = xgb.Booster({'nthread':4}) # init model
bst.load_model("model.bin") # load data