Python 软件包介绍

本文档给出了有关 xgboost python 软件包的基本演练.

其他有用的链接列表

安装 XGBoost

要安装 XGBoost, 请执行以下步骤:

  • 您需要在项目的根目录下运行 make 命令
  • python-package 目录下运行
  1. python setup.py install
  1. import xgboost as xgb

数据接口

XGBoost python 模块能够使用以下方式加载数据:

  • libsvm txt format file(libsvm 文本格式的文件)
  • Numpy 2D array, and(Numpy 2维数组, 以及)
  • xgboost binary buffer file. (xgboost 二进制缓冲文件)

这些数据将会被存在一个名为 DMatrix 的对象中.

  • 要加载 ligbsvm 文本格式或者 XGBoost 二进制文件到 DMatrix 对象中. 代码如下:
  1. dtrain = xgb.DMatrix('train.svm.txt')
  2. dtest = xgb.DMatrix('test.svm.buffer')
  • 要加载 numpy 的数组到 DMatrix 对象中, 代码如下:
  1. data = np.random.rand(5,10) # 5 entities, each contains 10 features
  2. label = np.random.randint(2, size=5) # binary target
  3. dtrain = xgb.DMatrix( data, label=label)
  • 要加载 scpiy.sparse 数组到 DMatrix 对象中, 代码如下:
  1. csr = scipy.sparse.csr_matrix((dat, (row, col)))
  2. dtrain = xgb.DMatrix(csr)
  • 保存 DMatrix 到 XGBoost 二进制文件中后, 会在下次加载时更快:
  1. dtrain = xgb.DMatrix('train.svm.txt')
  2. dtrain.save_binary("train.buffer")
  • 要处理 DMatrix 中的缺失值, 您可以通过指定缺失值的参数来初始化 DMatrix:
  1. dtrain = xgb.DMatrix(data, label=label, missing = -999.0)
  • 在需要时可以设置权重:
  1. w = np.random.rand(5, 1)
  2. dtrain = xgb.DMatrix(data, label=label, missing = -999.0, weight=w)

设置参数

XGBoost 使用 pair 格式的 list 来保存 参数. 例如:

  • Booster(提升)参数
  1. param = {'bst:max_depth':2, 'bst:eta':1, 'silent':1, 'objective':'binary:logistic' }
  2. param['nthread'] = 4
  3. param['eval_metric'] = 'auc'
  • 您也可以指定多个评估的指标:
  1. param['eval_metric'] = ['auc', 'ams@0']
  2. # alternativly:
  3. # plst = param.items()
  4. # plst += [('eval_metric', 'ams@0')]
  • 指定验证集以观察性能
  1. evallist = [(dtest,'eval'), (dtrain,'train')]

训练

有用参数列表和数据以后, 您现在可以训练一个模型了.

  • 训练
  1. num_round = 10
  2. bst = xgb.train( plst, dtrain, num_round, evallist )
  • 保存模型 训练之后,您可以保存模型并将其转储出去.
  1. bst.save_model('0001.model')
  • 转储模型和特征映射 您可以将模型转储到 txt 文件并查看模型的含义
  1. # 转存模型
  2. bst.dump_model('dump.raw.txt')
  3. # 转储模型和特征映射
  4. bst.dump_model('dump.raw.txt','featmap.txt')
  • 加载模型 当您保存模型后, 您可以使用如下方式在任何时候加载模型文件
  1. bst = xgb.Booster({'nthread':4}) #init model
  2. bst.load_model("model.bin") # load data

提前停止

如果您有一个验证集, 你可以使用提前停止找到最佳数量的 boosting rounds(梯度次数). 提前停止至少需要一个 evals 集合. 如果有多个, 它将使用最后一个.

train(..., evals=evals, early_stopping_rounds=10)

该模型将开始训练, 直到验证得分停止提高为止. 验证错误需要至少每个 early_stopping_rounds 减少以继续训练.

如果提前停止,模型将有三个额外的字段: bst.best_score, bst.best_iterationbst.best_ntree_limit. 请注意 train() 将从上一次迭代中返回一个模型, 而不是最好的一个.

这与两个度量标准一起使用以达到最小化(RMSE, 对数损失等)和最大化(MAP, NDCG, AUC). 请注意, 如果您指定多个评估指标, 则 param ['eval_metric'] 中的最后一个用于提前停止.

预测

当您 训练/加载 一个模型并且准备好数据之后, 即可以开始做预测了.

  1. # 7 个样本, 每一个包含 10 个特征
  2. data = np.random.rand(7, 10)
  3. dtest = xgb.DMatrix(data)
  4. ypred = bst.predict(xgmat)

如果在训练过程中提前停止, 可以用 bst.best_ntree_limit 从最佳迭代中获得预测结果:

  1. ypred = bst.predict(xgmat,ntree_limit=bst.best_ntree_limit)

绘图

您可以使用 plotting(绘图)模块来绘制出 importance(重要性)以及输出的 tree(树).

要绘制出 importance(重要性), 可以使用 plot_importance. 该函数需要安装 matplotlib.

  1. xgb.plot_importance(bst)

输出的 tree(树)会通过 matplotlib 来展示, 使用 plot_tree 指定 target tree(目标树)的序号. 该函数需要 graphvizmatplotlib.

  1. xgb.plot_tree(bst, num_trees=2)

当您使用 IPython 时, 你可以使用 to_graphviz 函数, 它可以将 target tree(目标树)转换成 graphviz 实例. graphviz 实例会自动的在 IPython 上呈现.

  1. xgb.to_graphviz(bst, num_trees=2)