XGB-23:Xgboost中的Python Package介绍

本文介绍了如何使用XGBoost的Python模块处理不同数据格式,如NumPy数组、scipy.sparse矩阵、PandasDataFrame,以及如何创建、保存和处理DMatrix对象。同时涵盖了XGBoost的参数设置、模型训练、Scikit-Learn接口等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据接口

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()

参考

### XGBoost算法在Python中的源码实现 XGBoost 是一种基于梯度提升决策树(Gradient Boosting Decision Tree, GBDT)的机器学习算法,其核心目标是通过优化计算效率和模型性能来提高预测能力。以下是关于 XGBoostPython 源码实现的相关说明。 #### 1. XGBoost 的基本原理 XGBoost 使用加法模型和前向分步策略构建集成模型。它通过对损失函数的一阶导数和二阶导数进行泰勒展开近似,从而高效地寻找最优分裂点[^4]。这种设计使得 XGBoost 能够处理大规模数据集并提供更高的精度。 #### 2. 安装与导入 为了查看或运行 XGBoost 的源码,在安装完成后可以访问 `xgboost` 库的核心模块。通常情况下,可以通过以下方式加载库: ```python import xgboost as xgb ``` 完整的源码可以在 GitHub 上找到[XGBoost官方仓库](https://github.com/dmlc/xgboost),其中包含了 C++ 和 Python 接口的具体实现细节。 #### 3. Python 中的关键组件 XGBoostPython 实现主要依赖于底层的 C++ 引擎,因此大部分逻辑是在编译后的共享库中完成的。然而,Python 部分提供了高层接口以便用户调用。以下是几个重要的部分及其功能描述: - **DMatrix**: 数据结构用于存储训练数据。 ```python dtrain = xgb.DMatrix('data/train.svm.txt') ``` - **参数配置**: 设置 Booster 参数以控制模型行为。 ```python params = { 'objective': 'binary:logistic', 'max_depth': 6, 'eta': 0.3, 'eval_metric': 'auc' } ``` - **训练过程**: 利用指定的数据和参数执行训练操作。 ```python bst = xgb.train(params, dtrain, num_boost_round=10) ``` 这些高层次的操作封装了复杂的内部机制,而具体实现则位于底层代码中。 #### 4. 查看源码方法 如果希望深入研究 XGBoost 的源码实现,可以从以下几个方面入手: - 浏览 [GitHub Repository](https://github.com/dmlc/xgboost/tree/master/python-package/xgboost) 下的 `python-package` 文件夹获取 Python 封装层的信息。 - 对于更深层次的理解,则需探索 `/src` 目录下的 C++ 文件,这里定义了诸如树生长、剪枝以及分布式通信等功能[^5]。 注意:由于 XGBoost 结合了多种编程语言特性,阅读时可能需要一定的跨平台开发经验。 --- ### 示例代码片段 下面展示了一个简单的例子,演示如何利用 XGBoost 进行分类任务建模: ```python import xgboost as xgb from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split # 加载乳腺癌数据集作为示例 data = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split( data.data, data.target, test_size=0.2, random_state=42) # 创建 DMatrix 格式的输入数据 dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) # 设定超参数 params = {'objective': 'binary:logistic', 'max_depth': 3} num_rounds = 10 # 训练模型 bst = xgb.train(params, dtrain, num_rounds) # 预测测试集结果 preds = bst.predict(dtest) print(preds[:5]) # 输出前五个样本的概率估计值 ``` 此脚本展示了从准备数据到最终评估整个流程的基本框架。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

uncle_ll

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

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

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

打赏作者

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

抵扣说明:

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

余额充值