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.]
廣告