XGBoost

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_iterationbst.best_ntree_limitxgboost.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)

你可能感兴趣的:(XGBoost)