XGB-23:Xgboost中的Python Package介绍

数据接口

XGBoost的Python模块能够从许多不同的数据格式中加载数据,包括CPU和GPU数据结构。有关支持的各种数据类型的完整列表,请参考支持各种XGBoost函数的数据结构。有关文本输入格式的详细说明,请访问DMatrix的文本输入格式

输入数据存储在DMatrix对象中。对于sklearn估计器接口,根据选择的算法和输入,将创建一个DMatrixQuantileDMatrix,有关详细信息,请参阅sklearn API参考。这里将使用DMatrix演示一些基本的输入类型。

  • 将NumPy数组加载到DMatrix中
import numpy as np
import xgboost as xgb


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中
import xgboost as xgb
import scipy.sparse


dat = [1.0, 2.0, 3.0]  # data
row = [0, 1, 2]
col = [0, 1, 2]

csr = scipy.sparse.csr_matrix((dat, (row, col)))
csr.toarray()
dtrain = xgb.DMatrix(csr)

# array([[1., 0., 0.],
#        [0., 2., 0.],
#        [0., 0., 3.]])
  • 将Pandas Data frame加载到DMatrix中
import xgboost as xgb
import pandas as pd
import numpy as np


# 创建一个 Pandas DataFrame
data = pd.DataFrame(np.arange(12).reshape((4, 3)), columns=['a', 'b', 'c'])
label = pd.DataFrame(np.random.randint(2, size=4))

# 使用 Pandas DataFrame 创建一个 DMatrix 对象
dtrain = xgb.DMatrix(data, label=label)
  • 将 DMatrix 对象保存为 XGBoost 二进制文件:
dtrain.save_binary('train.buffer')
  • 将缺失值替换为默认值
dtrain = xgb.DMatrix(data, label=label, missing=np.NaN)
  • 创建Dmartrix对象时设置权重
data = np.random.rand(5, 10)  # 5 entities, each contains 10 features
label = np.random.randint(2, size=5)  # binary target
weights = np.random.rand(5, 1)  # 随机生成权重
dtrain = xgb.DMatrix(data, label=label, missing=np.NaN, weight=weights)

执行排序任务时,权重的数量应等于组的数量。

  • 从 LIBSVM 文本文件或二进制文件创建 DMatrix
dtrain = xgb.DMatrix('train.svm.txt?format=libsvm')
dtest = xgb.DMatrix('train.buffer')

XGBoost中的解析器功能有限。在使用Python接口时,建议使用sklearn的load_svmlight_file或其他类似的工具,而不是使用XGBoost内置的解析器。

  • 将CSV加载到DMatrix中
# label_column specifies the index of the column containing the true label
dtrain = xgb.DMatrix('train.csv?format=csv&label_column=0')
dtest = xgb.DMatrix('test.csv?format=csv&label_column=0')

XGBoost的解析器功能有限。在使用Python接口时,建议使用pandas的read_csv或其他类似工具,而不是XGBoost内置的解析器。

各种 XGBoost 函数支持的数据结构

Markers

  • T:支持

  • F:不支持

  • NE:对于该用例来说,无效的类型。例如,pd.Series不能是多目标标签。

  • NPA:借助numpy数组支持

  • CPA:借助cupy数组支持

  • SciCSR:借助scipy稀疏CSR支持。转换为scipy CSR可能会成功也可能失败。如果转换失败,则引发类型错误。

  • FF:如果请求,我们期待在不久的将来支持

  • empty:待填充

表头

  • X表示预测矩阵

  • Meta info:标签、权重等

  • Multi Label:多目标的二维标签

  • Others:除了在此明确列出的任何其他内容,包括格式如lil、dia、bsr等。XGBoost将尝试将其转换为scipy csr

支持矩阵

NameDMatrix XQuantileDMatrix XSklearn XMeta InfoInplace prediction
numpy.ndarrayTTTTT
scipy.sparse.csrTTTNET
scipy.sparse.cscTFTNEF
scipy.sparse.cooSciCSRFSciCSRNEF
uriTFFFNE
listNPANPANPANPANPA
tupleNPANPANPANPANPA
pandas.DataFrameNPANPANPANPANPA
pandas.SeriesNPANPANPANPANPA
cudf.DataFrameTTTTT
cudf.SeriesTTTTFF
cupy.ndarrayTTTTT
torch.TensorTTTTT
dlpackCPACPACPAFF
datatable.FrameTFFNPAFF
datatable.TableTFFNPAFF
modin.DataFrameNPAFFNPANPAFF
modin.SeriesNPAFFNPANPAFF
pyarrow.TableNPANPANPANPANPA
arrayNPAFNPANPAH
OthersSciCSRFFF

设置参数

XGBoost可以使用键值对列表或字典来设置参数。例如:

  • Booster参数
param = {'max_depth': 2, 'eta': 1, 'objective': 'binary:logistic'}
param['nthread'] = 4
param['eval_metric'] = 'auc'
  • 还可以指定多个评估指标
param['eval_metric'] = ['auc', 'ams@0']

# alternatively:
# plst = param.items()
# plst += [('eval_metric', 'ams@0')]
  • 指定验证集以监控性能
evallist = [(dtrain, 'train'), (dtest, 'eval')]

训练

训练模型需要参数列表和数据集。

num_round = 10
bst = xgb.train(param, dtrain, num_round, evallist)

训练完成后,模型可以被保存。

bst.save_model('0001.model')

模型及其特征映射也可以转储到文本文件中。

# 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 model

xgboost.Booster 中的 update 和 boost 方法仅设计用于内部使用。包装函数 xgboost.train 会进行一些预配置,包括设置缓存和其他参数。

Early Stopping

如果有一个验证集,可以使用提前停止来找到最佳的提升轮数。提前停止需要在evals中至少有一个集。如果有多个,它将使用最后一个。

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

模型将一直训练,直到验证分数停止提高。验证误差需要每个 early_stopping_rounds 至少减少一次才能继续训练。

如果发生提前停止,模型将具有两个额外的字段:bst.best_scorebst.best_iterationxgboost.train` 将返回最后一次迭代的模型,而不是最佳模型。

这适用于最小化指标(RMSE、对数损失等)和最大化指标(MAP、NDCG、AUC)。如果指定了多个评估指标,则 param['eval_metric'] 中的最后一个指标用于提前停止

绘图

可以使用绘图模块来绘制特征重要性和输出树。

要绘制特征重要性,使用xgboost.plot_importance()函数,需安装matplotlib

xgb.plot_importance(bst)

要通过 matplotlib 绘制输出树,使用 xgboost.plot_tree(),指定目标树的序数。此函数需要 graphvizmatplotlib

xgb.plot_tree(bst, num_trees=2)

当使用 IPython 时,可以使用 xgboost.to_graphviz() 函数,将目标树转换为 graphviz 实例。graphviz 实例将自动在 IPython 中呈现。

xgb.to_graphviz(bst, num_trees=2)

Scikit-Learn 接口

XGBoost 提供了一个易于使用的 scikit-learn 接口,用于一些预定义模型,包括回归、分类和排名。

# Use "hist" for training the model.
reg = xgb.XGBRegressor(tree_method="hist", device="cuda")

# Fit the model using predictor X and response y.
reg.fit(X, y)

# Save model into JSON format.
reg.save_model("regressor.json")

在需要时,用户仍然可以访问底层的 booster 模型:

booster: xgb.Booster = reg.get_booster()

参考

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值