Xgboost中的Python Package介绍

数据接口

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

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

  • 将NumPy数组加载到DMatrix中
python 复制代码
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中
python 复制代码
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中
python 复制代码
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 二进制文件:
python 复制代码
dtrain.save_binary('train.buffer')
  • 将缺失值替换为默认值
python 复制代码
dtrain = xgb.DMatrix(data, label=label, missing=np.NaN)
  • 创建Dmartrix对象时设置权重
python 复制代码
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
python 复制代码
dtrain = xgb.DMatrix('train.svm.txt?format=libsvm')
dtest = xgb.DMatrix('train.buffer')

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

  • 将CSV加载到DMatrix中
python 复制代码
# 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

支持矩阵

Name DMatrix X QuantileDMatrix X Sklearn X Meta Info Inplace prediction
numpy.ndarray T T T T T
scipy.sparse.csr T T T NE T
scipy.sparse.csc T F T NE F
scipy.sparse.coo SciCSR F SciCSR NE F
uri T F F F NE
list NPA NPA NPA NPA NPA
tuple NPA NPA NPA NPA NPA
pandas.DataFrame NPA NPA NPA NPA NPA
pandas.Series NPA NPA NPA NPA NPA
cudf.DataFrame T T T T T
cudf.Series T T T T FF
cupy.ndarray T T T T T
torch.Tensor T T T T T
dlpack CPA CPA CPA FF
datatable.Frame T FF NPA FF
datatable.Table T FF NPA FF
modin.DataFrame NPA FF NPA NPA FF
modin.Series NPA FF NPA NPA FF
pyarrow.Table NPA NPA NPA NPA NPA
array NPA F NPA NPA H
Others SciCSR F F F

设置参数

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

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

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

训练

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

python 复制代码
num_round = 10
bst = xgb.train(param, dtrain, num_round, evallist)

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

python 复制代码
bst.save_model('0001.model')

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

python 复制代码
# dump model
bst.dump_model('dump.raw.txt')

# dump model with feature map
bst.dump_model('dump.raw.txt', 'featmap.txt')

可以按以下方式加载保存的模型:

python 复制代码
bst = xgb.Booster({'nthread': 4})  # init model

bst.load_model('model.bin')  # load model

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

Early Stopping

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

python 复制代码
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

python 复制代码
xgb.plot_importance(bst)

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

python 复制代码
xgb.plot_tree(bst, num_trees=2)

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

python 复制代码
xgb.to_graphviz(bst, num_trees=2)

Scikit-Learn 接口

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

python 复制代码
# 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 模型:

python 复制代码
booster: xgb.Booster = reg.get_booster()

参考

相关推荐
陈苏同学几秒前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
唐家小妹4 分钟前
介绍一款开源的 Modern GUI PySide6 / PyQt6的使用
python·pyqt
羊小猪~~36 分钟前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm
我是哈哈hh39 分钟前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
Marst Code1 小时前
(Django)初步使用
后端·python·django
985小水博一枚呀1 小时前
【对于Python爬虫的理解】数据挖掘、信息聚合、价格监控、新闻爬取等,附代码。
爬虫·python·深度学习·数据挖掘
立秋67891 小时前
Python的defaultdict详解
服务器·windows·python
萧鼎2 小时前
Python第三方库选择与使用陷阱避免
开发语言·python
白拾2 小时前
使用Conda管理python环境的指南
开发语言·python·conda
萱仔学习自我记录2 小时前
微调大语言模型——超详细步骤
人工智能·深度学习·机器学习