ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# Python 软件包介绍 本文档给出了有关 xgboost python 软件包的基本演练. **_其他有用的链接列表_** * [Python 演练代码集合](https://github.com/tqchen/xgboost/blob/master/demo/guide-python) * [Python API 参考](python_api.html) ## 安装 XGBoost 要安装 XGBoost, 请执行以下步骤: * 您需要在项目的根目录下运行 `make` 命令 * 在 `python-package` 目录下运行 ``` python setup.py install ``` ``` 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` 对象中. 代码如下: ``` dtrain = xgb.DMatrix('train.svm.txt') dtest = xgb.DMatrix('test.svm.buffer') ``` * 要加载 numpy 的数组到 `DMatrix` 对象中, 代码如下: ``` 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) ``` * 要加载 scpiy.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") ``` * 要处理 `DMatrix` 中的缺失值, 您可以通过指定缺失值的参数来初始化 `DMatrix`: ``` dtrain = xgb.DMatrix(data, label=label, missing = -999.0) ``` * 在需要时可以设置权重: ``` w = np.random.rand(5, 1) dtrain = xgb.DMatrix(data, label=label, missing = -999.0, weight=w) ``` ## 设置参数 XGBoost 使用 pair 格式的 list 来保存 [_参数_](../parameter.html). 例如: * Booster(提升)参数 ``` param = {'bst:max_depth':2, 'bst:eta':1, 'silent':1, 'objective':'binary:logistic' } param['nthread'] = 4 param['eval_metric'] = 'auc' ``` * 您也可以指定多个评估的指标: ``` param['eval_metric'] = ['auc', 'ams@0'] # alternativly: # plst = param.items() # plst += [('eval_metric', 'ams@0')] ``` * 指定验证集以观察性能 ``` evallist = [(dtest,'eval'), (dtrain,'train')] ``` ## 训练 有用参数列表和数据以后, 您现在可以训练一个模型了. * 训练 ``` num_round = 10 bst = xgb.train( plst, dtrain, num_round, evallist ) ``` * 保存模型 训练之后,您可以保存模型并将其转储出去. ``` bst.save_model('0001.model') ``` * 转储模型和特征映射 您可以将模型转储到 txt 文件并查看模型的含义 ``` # 转存模型 bst.dump_model('dump.raw.txt') # 转储模型和特征映射 bst.dump_model('dump.raw.txt','featmap.txt') ``` * 加载模型 当您保存模型后, 您可以使用如下方式在任何时候加载模型文件 ``` bst = xgb.Booster({'nthread':4}) #init model 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_iteration` 和 `bst.best_ntree_limit`. 请注意 `train()` 将从上一次迭代中返回一个模型, 而不是最好的一个. 这与两个度量标准一起使用以达到最小化(RMSE, 对数损失等)和最大化(MAP, NDCG, AUC). 请注意, 如果您指定多个评估指标, 则 `param ['eval_metric']` 中的最后一个用于提前停止. ## 预测 当您 训练/加载 一个模型并且准备好数据之后, 即可以开始做预测了. ``` # 7 个样本, 每一个包含 10 个特征 data = np.random.rand(7, 10) dtest = xgb.DMatrix(data) ypred = bst.predict(xgmat) ``` 如果在训练过程中提前停止, 可以用 `bst.best_ntree_limit` 从最佳迭代中获得预测结果: ``` ypred = bst.predict(xgmat,ntree_limit=bst.best_ntree_limit) ``` ## 绘图 您可以使用 plotting(绘图)模块来绘制出 importance(重要性)以及输出的 tree(树). 要绘制出 importance(重要性), 可以使用 `plot_importance`. 该函数需要安装 `matplotlib`. ``` xgb.plot_importance(bst) ``` 输出的 tree(树)会通过 `matplotlib` 来展示, 使用 `plot_tree` 指定 target tree(目标树)的序号. 该函数需要 `graphviz` 和 `matplotlib`. ``` xgb.plot_tree(bst, num_trees=2) ``` 当您使用 `IPython` 时, 你可以使用 `to_graphviz` 函数, 它可以将 target tree(目标树)转换成 `graphviz` 实例. `graphviz` 实例会自动的在 `IPython` 上呈现. ``` xgb.to_graphviz(bst, num_trees=2) ```