Python
import xgboost as xgb
# read in data
dtrain = xgb.DMatrix('demo/data/agaricus.txt.train')
dtest = xgb.DMatric('demo/data/agaricus.txt.test')
# specify parameters via map
param = {'max_depth': 2, 'eta': 1, 'silent': 1, 'objective': 'binary:logistic'}
num_round = 2
bst = xgb.train(param, dtrain, num_round)
# make prediction
preds = bst.predict(dtest)
数据接口
可以从以下途径加载数据
- LibSVM text format file
- Comma-separated values (CSV) file
- NumPy 2D sparse array
- SciPy 2D sparse array
- Pandas data frame
- XGBoost binary buffer file
数据存储在 DMatrix 对象中,从CSV文件中读取数据到DMatrix的方法如下:
dtrain = xgb.DMatrix('train.csv?format=csv&label_column=0')
dtest = xgb.DMatrix('test.csv?format=csv&label_column=0')
在构造DMatrix时可以用默认值来代替缺失数据,方法如下:
dtrain = xgb.DMtrix(data, label=label, missing=-999.0)
权重设置如下:
w = np.random.rand(5, 1)
dtrain = xgb.DMatrix(data, label=label, missing=-999.0, weight=w)
设置参数
XGBoost可以使用 a list of pairs 或者字典来设置参数,例如:
-
Booster parameters
param = {'max_depth': 2, 'eta': 1, 'silent': 1, 'objective': 'binary:logistic'} param['nthread'] = 4 param['eval_metric'] = 'auc'
-
也可以指定 multiple eval metrics:
param['eval_metric'] = ['auc', 'ams@0'] # alternatively: # plst = param.items() # plst += [('eval_metric', 'ams@0')]
-
指定 validations set 来观察性能
evallist = [(dtest, 'eval'), (dtrain, 'train')]
训练
训练模型需要一个参数列表和数据集
num_round = 10
bst = xgb.train(param, dtrain, num_round, evallist)
训练完之后,可以对模型进行存储
bst.save_model('0001.model')
模型和它的 feature map 可以从文本文件中加载
# dump model
bst.dump_model('dump.raw.txt')
# dump model with feature map
bst.dump_model('dump.raw.txt', 'featmap.txt')
保存的模型可以用以下方式加载:
bst = xgb.Booster({'nthread': 4}) # init model
bst.load_model('model.bin') # load data
Early Stopping
为了和validation进行对比,可以提前停止,来寻找最佳的 boosting rounds 。提前停止需要 evals 中有至少一个集合。如果有多个集合的话,可以用下面的方式来停止:
train(..., evals=evals, early_stopping_rounds=10)
模型将会训练直到 validation score 不在提升。 Validation error needs to decrease at least every early_stopping_rounds to continue training.
如果提前停止了,模型将会有三个额外的 fields :bst.best_score
, bst.best_iteration
和 bst.best_ntree_limit
。xgboost.train()
会从返回最后一次迭代中选择模型,而不是最好的一个。
这个对于所有的矩阵包括 minimize (RMSE, log loss, etc.) 和 maximize (MAP, NDCG, AUC) 都是适用的. 如果指定了多余一个评估矩阵,那么只有 param['eval_metric']
中的最后一个会起到作用。
预测
训练好的或者是加载的模型可以用来对数据集进行预测,方法如下:
# 7 entities, each contains 10 features
data = np.random.rand(7, 10)
dtest = xgb.DMatrix(data)
ypred = bst.predict(dtest)
如果使用了提前停止,可以通过 bst.best_ntree_limit
来获得最好的一轮迭代的预测结果。
作图
可以使用 plotting 模块来画 importance and output tree。 画 importance,使用 xgboost.plot_importance()
。这个函数需要安装matplotlib
模块。
xgb.plot_tree(bst, num_trees=2)