XGBoost - 使用 DMatrix

XGBoost 使用一种称为 DMatrix 的特殊数据结构来更有效地存储数据集。内存和性能得到优化,特别是如果可以处理大型数据集。

DMatrix 的重要性

以下是 DMatrix 在 XGBoost 中很重要的一些关键点 −

  • DMatrix 通过减少所需的内存量轻松存储大型数据集。

  • 当您的数据更改为 DMatrix 时,XGBoost 可以自动创建权重并执行各种预处理任务。它甚至可以处理缺失的值。

  • 使用 DMatrix 代替标准数据集格式可以加快训练速度,因为 XGBoost 可以快速访问和使用数据。

使用 DMatrix 的 XGBoost 示例

以下是借助 DMatrix − 创建 XGboost 模型的分步过程

1. 导入库

首先,您需要导入模型所需的库。

import xgboost as xgb
import pandas as pd

2. 定义数据集

定义数据集,这可以是您的 CSV 数据。这里我们使用了 Wholesale-customers-data.csv 数据集。

df = pd.read_csv('/Python/Wholesale-customers-data.csv')

3. 分离特征

现在我们将在此步骤中分离特征 (X) 和目标 (y)。

# 特征(除"Channel"列之外的所有内容)
X = df.drop(columns=['Channel'])
# 目标变量(Channel 列)
y = df['Channel']

4.转换为 DMatrix

在此阶段,我们将特征和目标转换为 DMatrix,这是针对 XGBoost 优化的数据结构。

dtrain = xgb.DMatrix(X, label=y)

5. 定义参数

下面我们将定义 XGBoost 模型参数。

params = {
    # 树的最大深度
    'max_depth': 3,
    # 学习率
    'eta': 0.1,
    # 多类分类的目标函数
    'objective': 'multi:softmax',
    # 类别数量
    'num_class': 3
}

6. 训练模型

现在我们将借助 DMatrix 训练模型。

num_round = 10 # boosting 轮数
bst = xgb.train(params, dtrain, num_round)

7. 保存模型并获取预测

训练完成后,您可以保存模型。为了进行预测,我们使用与测试相同的数据,但您可以在实际场景中使用新数据。

# 在此处保存模型
bst.save_model('xgboost_model.json')

# 在此处进行预测
dtest = xgb.DMatrix(X)
predictions = bst.predict(dtest)

# 打印预测
print(predictions)

输出

此输出根据给定的特征显示每个观察的预测类别。

[2. 2. 2. 1. 2. 2. 2. 2. 1. 2. 2. 1. 2. 2. 2. 1. 2. 1. 2. 1. 2. 1. 1. 2.
 2. 2. 1. 1. 2. 1. 1. 1. 1. 1. 1. 2. 1. 2. 2. 1. 1. 1. 2. 2. 2. 2. 2. 2.
 2. 2. 1. 1. 2. 2. 1. 1. 2. 2. 1. 2. 2. 2. 2. 2. 1. 2. 2. 2. 1. 1. 1. 1.
 1. 1. 2. 1. 1. 2. 1. 1. 1. 2. 2. 1. 2. 2. 2. 1. 1. 1. 1. 1. 2. 1. 2. 1.
 2. 1. 1. 1. 2. 2. 2. 1. 1. 1. 2. 2. 2. 2. 1. 2. 1. 1. 1. 1. 1. 1. 1. 1.
 1. 1. 1. 2. 1. 1. 1. 2. 1. 1. 1. 1. 1. 1. 1. 1. 2. 1. 1. 1. 1. 1. 1. 1.
 1. 2. 1. 1. 1. 1. 1. 1. 1. 1. 1. 2. 2. 1. 2. 2. 2. 1. 1. 2. 2. 2. 2. 1.
 1. 1. 2. 2. 2. 2. 1. 2. 1. 1. 1. 1. 1. 2. 2. 1. 1. 1. 1. 2. 2. 2. 1. 1.
 1. 2. 1. 1. 1. 2. 1. 1. 2. 2. 1. 1. 1. 2. 1. 2. 2. 2. 1. 2. 1. 2. 2. 2.
 2. 1. 2. 1. 1. 2. 1. 1. 1. 1. 2. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
 1. 1. 1. 1. 2. 2. 1. 1. 1. 1. 1. 2. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
 2. 1. 2. 1. 2. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 2. 1. 2. 1. 1. 1. 1. 1. 1.
 1. 1. 1. 1. 1. 2. 1. 1. 1. 2. 2. 1. 2. 2. 2. 2. 2. 2. 2. 1. 1. 2. 1. 1.
 2. 1. 1. 2. 1. 1. 1. 2. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 2. 1. 2. 1. 2.
 1. 1. 1. 1. 2. 2. 2. 2. 1. 1. 2. 2. 1. 2. 1. 2. 1. 2. 1. 1. 1. 2. 1. 1.
 1. 1. 1. 1. 1. 2. 1. 1. 1. 1. 1. 1. 1. 2. 1. 1. 2. 1. 1. 1. 1. 1. 1. 1.
 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 2. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 2.
 2. 1. 1. 1. 2. 1. 1. 2. 2. 2. 2. 1. 2. 2. 1. 2. 2. 1. 2. 1. 1. 1. 1. 1.
 1. 1. 2. 1. 1. 2. 1. 1.]