XGBoost - 使用DMatrix



XGBoost 使用一种名为 DMatrix 的特殊数据结构来更有效地存储数据集。它优化了内存和性能,尤其是在处理大型数据集时。

DMatrix 的重要性

以下是 DMatrix 在 XGBoost 中重要的几个关键点:

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

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

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

XGBoost 使用 DMatrix 的示例

以下是使用 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)。

# Features (everything except the 'Channel' column)
X = df.drop(columns=['Channel'])  
# Target variable (Channel column)
y = df['Channel']  

4. 转换为 DMatrix

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

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

5. 定义参数

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

params = {
   # Maximum depth of a tree
   'max_depth': 3,  
   # Learning rate
   'eta': 0.1,      
   # Objective function for multiclass classification
   'objective': 'multi:softmax',  
   # Number of classes
   'num_class': 3   
}

6. 训练模型

现在我们将使用 DMatrix 训练模型。

num_round = 10  # Number of boosting rounds
bst = xgb.train(params, dtrain, num_round)

7. 保存模型并获取预测结果

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

# Save the model here
bst.save_model('xgboost_model.json')

# Make Predictions here
dtest = xgb.DMatrix(X)  
predictions = bst.predict(dtest)

# Print predictions
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.]
广告
© . All rights reserved.