XGBoost 0.72 版 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

XGBoost 0.72 版

重要

XGBoost 0.72 已由 Amazon SageMaker AI 取代。您仍可以透過提取舊版 XGBoost 的映像 URI 來使用此舊版 XGBoost (做為內建演算法),如以下程式碼範例所示。對於 XGBoost,結尾為 :1 的映像 URI適用於舊版本。

SageMaker Python SDK v1
import boto3 from sagemaker.amazon.amazon_estimator import get_image_uri xgb_image_uri = get_image_uri(boto3.Session().region_name, "xgboost", repo_version="1")
SageMaker Python SDK v2
import boto3 from sagemaker import image_uris xgb_image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "1")

如果你想使用較新的版本,你必須明確指定圖像 URI 標記 (請參閱支援的版本)。

此 Amazon SageMaker AI XGBoost 演算法的先前版本是以 0.72 版本為基礎。XGBoost (eXtreme Gradient Boosting) 為一款熱門的有效率梯度提升樹演算法開放原始碼實作。梯度提升是受監管的學習演算法,藉由結合一組較簡單、較脆弱的模型預估值來嘗試精確預測目標變數。XGBoost 在機器學習競賽中表現出色,歸因於它能夠穩固地處理各種資料類型、關聯與分發,且因為可調校並微調大量超參數來提升相符性。這樣的彈性讓 XGBoost 成為回歸、分類 (二進位與多類別) 以及排序等問題的有效解決方法。

客戶應考慮使用新版 搭配 Amazon SageMaker AI 的 XGBoost 演算法。他們可以將其用作 SageMaker AI 內建演算法,或用作架構,以在本機環境中執行指令碼,例如,通常使用 Tensorflow 深度學習架構。新的實作具有更小的記憶體使用量、更好的記錄、已改善的超參數驗證,以及已擴展的指標集。如果客戶需要延後遷移到新版本,則 XGBoost 的先前實作仍可供客戶使用。但是,這個先前的實作仍將繫結至 0.72 版的 XGBoost。

XGBoost 0.72 版的輸入/輸出介面

梯度提升在表格式資料中操作,含有代表觀察的行、還有一個代表目標變數或標籤的欄,而剩下的欄則代表功能。

XGBoost 的 SageMaker AI 實作支援訓練和推論的 CSV 和 libsvm 格式:

  • 針對 Training ContentType,有效輸入為 text/libsvm (預設值) 或 text/csv

  • 針對 Inference ContentType,有效輸入為 text/libsvmtext/csv (預設值)。

注意

對於 CSV 訓練,演算法假設目標變數在第一個欄,且 CSV 沒有標題記錄。對於 CSV 推論,演算法假設 CSV 輸入沒有標籤欄。

針對 libsvm 訓練,演算法假設標籤是在第一個欄中。後續的欄包含特徵的零底索引值對。因此每個資料列的格式皆為:<label> <index0>:<value0> <index1>:<value1> ... libsvm 的推論請求可能有、也可能沒有此 libsvm 格式的標籤。

這與其他 SageMaker AI 演算法不同,其使用 protobuf 訓練輸入格式,以維持與標準 XGBoost 資料格式的更一致性。

對於 CSV 訓練輸入模式,可供演算法使用的總記憶體 (在 InstanceType 中可用的執行個體計數 *) 需可保留訓練資料集。libsvm 訓練輸入模式並非必要,但建議使用。

SageMaker AI XGBoost 使用 Python pickle 模組序列化/還原序列化模型,可用於儲存/載入模型。

在開放原始碼 XGBoost 中使用使用 SageMaker AI XGBoost 訓練的模型
  • 使用以下 Python 程式碼:

    import pickle as pkl import tarfile import xgboost t = tarfile.open('model.tar.gz', 'r:gz') t.extractall() model = pkl.load(open(model_file_path, 'rb')) # prediction with test data pred = model.predict(dtest)
若要區隔標籤資料點的重要性,請使用執行個體權重支援
  • SageMaker AI XGBoost 可讓客戶透過為每個執行個體指派權重值來區分已標記資料點的重要性。針對 text/libsvm 輸入,客戶可以將執行個體連接到標籤後面,以指派權重值給資料。例如:label:weight idx_0:val_0 idx_1:val_1...。針對 text/csv 輸入,客戶需要在參數中開啟 csv_weights 標記,將欄中的權重值連接在標籤後面。例如:label,weight,val_0,val_1,...)。

適用於 XGBoost 0.72 版的 EC2 執行個體建議

SageMaker AI XGBoost 目前僅使用 CPUs 進行訓練。這是一個記憶體限制型 (相對於運算限制型) 的演算法。因此,一般用途的運算執行個體 (如 M4) 相較於運算最佳化執行個體 (如 C4),是較好的選擇。此外,我們建議您在所選執行個體中需有足夠的總記憶體才可保留訓練資料。雖然支援使用磁碟空間來處理與主記憶體不符的資料 (libsvm 輸入模式可使用核心外功能),將快取檔案寫入磁碟機會讓演算法處理時間變慢。

XGBoost 0.72 版範例筆記本

如需示範如何使用最新版 SageMaker AI XGBoost 做為內建演算法來訓練和託管迴歸模型的範例筆記本,請參閱使用 Amazon SageMaker AI XGBoost 演算法進行迴歸。若要使用 0.72 版的 XGBoost,您需要將範本程式碼中的版本變更為 0.72。如需如何建立和存取可用於在 SageMaker AI 中執行範例的 Jupyter 筆記本執行個體的說明,請參閱 Amazon SageMaker 筆記本執行個體。建立並開啟筆記本執行個體後,請選取 SageMaker AI 範例索引標籤,以查看所有 SageMaker AI 範例的清單。使用 XGBoost 演算法模組化範例筆記本的主題位於 Amazon 演算法簡介一節。若要開啟筆記本,請按一下其使用標籤,然後選取建立複本

XGBoost 0.72 版超參數

下表包含 XGBoost 演算法的超參數。這些是由使用者設定的參數,用來協助從資料預估模型參數。首先列出的是必須設定的超參數,依字母順序排列。接著列出的是選用的超參數,也是依字母順序排列。SageMaker AI XGBoost 演算法是開放原始碼 XGBoost 套件的實作。目前SageMaker AI 支援 0.72 版。如需此版 XGBoost 之超參數組態的詳細資訊,請參閱 XGBoost 參數

參數名稱 描述
num_class

類別數。

objective 設為 multi:softmaxmulti:softprob,則為必要

有效值:整數

num_round

執行訓練的捨入數。

必要

有效值:整數

alpha

權重的 L1 正規化詞彙。增加此值可讓模型更為保守。

選用

有效值:浮點數

預設值:0

base_score

所有執行個體、全域偏差的初始預測分數。

選用

有效值:浮點數

預設值:0.5

booster

要使用哪些提升工具。gbtreedart 值使用樹狀模型,而 gblinear 使用線性函式。

選用

有效值:字串。gbtreegblineardart 其中之一。

預設值:gbtree

colsample_bylevel

每個層級中的每個分割之欄次取樣率。

選用

有效值:浮點數。範圍:[0,1]。

預設值:1

colsample_bytree

建構每棵樹時的欄次取樣率。

選用

有效值:浮點數。範圍:[0,1]。

預設值:1

csv_weights

啟用此標記時,XGBoost 會採用訓練資料的第二個欄 (標籤後面的欄) 做為執行個體權重,區隔 csv 輸入的執行個體重要性。

選用

有效值:0 或 1

預設值:0

early_stopping_rounds

模型會一直訓練到驗證分數停止上升為止。驗證錯誤需至少以每 early_stopping_rounds 的速率降低才可繼續訓練。SageMaker AI 託管使用最佳模型進行推論。

選用

有效值:整數

預設值:-

eta

用於更新以避免過度擬合的步驟大小收縮。在每個提升步驟後,您可以直接取得新功能的權重。eta 參數會縮減功能權重,讓提升程序更保守。

選用

有效值:浮點數。範圍:[0,1]。

預設值:0.3

eval_metric

驗證資料的評估指標。預設指標是根據目標指派:

  • rmse:適用於迴歸

  • error:適用於分類

  • map:適用於排名

如需有效輸入清單,請參閱 XGBoost 參數

選用

有效值:字串

預設值:根據目標預設。

gamma

進一步在樹上的葉片節點分區所需的最低遺失縮減量。演算法越大就越保守。

選用

有效值:浮點數。範圍:[0,∞)。

預設值:0

grow_policy

控制新增節點到樹的方式。目前只有 tree_method 設為 hist 時才受支援。

選用

有效值:字串。depthwiselossguide

預設值:depthwise

lambda

權重的 L2 正規化詞彙。增加此值可讓模型更為保守。

選用

有效值:浮點數

預設值:1

lambda_bias

偏差的 L2 正規化詞彙。

選用

有效值:浮點數。範圍:[0.0, 1.0]。

預設值:0

max_bin

最大數量的分散式資料匣,以儲存持續功能。僅於 tree_method 設為 hist 時才使用。

選用

有效值:整數

預設值:256

max_delta_step

每個樹的權重估值允許使用最高差量步驟。使用正整數時,有助於讓更新更為保守。偏好選項是在邏輯回歸中使用。設定為 1-10,以協助控制更新。

選用

有效值:整數。範圍:[0,∞)。

預設值:0

max_depth

最大樹深度。增加此值可讓模型更為複雜也更有可能過度擬合。0 表示無限制。當 grow_policy=depth-wise 時便需要限制。

選用

有效值:整數。範圍:[0,∞)

預設值:6

max_leaves

要新增的最大節點數量。只有 grow_policy 設為 lossguide 時才相關。

選用

有效值:整數

預設值:0

min_child_weight

子系中需要執行個體權重的最低總和 (hessian)。如果葉片節點中的樹狀分區步驟的執行個體權重總和少於 min_child_weight,建置程序將提供進一步的分區。在線性回歸模型中,這就是對應各節點中所需的最低執行個體數量。演算法越大就越保守。

選用

有效值:浮點數。範圍:[0,∞)。

預設值:1

normalize_type

標準化演算法類型。

選用

有效值:treeforest

預設值:tree

nthread

用於執行 xgboost 的平行執行緒數量。

選用

有效值:整數

預設值:最大執行緒數量。

objective

指定學習任務和對應的學習目標。範例:reg:logisticreg:softmaxmulti:squarederror。如需有效輸入的完整清單,請參閱 XGBoost 參數

選用

有效值:字串

預設值:reg:squarederror

one_drop

當啟用此旗標時,至少有一棵樹一律在退出時刪除。

選用

有效值:0 或 1

預設值:0

process_type

要執行的提升程序類型。

選用

有效值:字串。defaultupdate

預設值:default

rate_drop

退出率,指定在退出時刪除一小部分的舊樹。

選用

有效值:浮點數。範圍:[0.0, 1.0]。

預設值:0.0

refresh_leaf

這是 '重新整理' 更新工具外掛程式的參數。當設定為 true (1) 時,會更新樹分葉與樹節點的統計資料。當設定為 false (0) 時,只更新樹節點的統計資料。

選用

有效值:0/1

預設值:1

sample_type

取樣演算法類型。

選用

有效值:uniformweighted

預設值:uniform

scale_pos_weight

控制正負加權的平衡。對於不平衡的分類非常實用。要考慮的典型值:sum(negative cases) / sum(positive cases)

選用

有效值:浮點數

預設值:1

seed

隨機數量種子。

選用

有效值:整數

預設值:0

silent

0 表示列印執行中的訊息、1 表示靜音模式。

有效值:0 或 1

選用

預設值:0

sketch_eps

僅適用於預估值貪婪演算法。這會轉譯為 O(1/sketch_eps) 個資料匣。相較於直接選擇資料匣數量,這會搭配含有示意圖精準度的理論保證。

選用

有效值:浮點數、範圍:[0, 1]。

預設值:0.03

skip_drop

反覆提升時略過退出程序的可能性。

選用

有效值:浮點數。範圍:[0.0, 1.0]。

預設值:0.0

subsample

訓練執行個體的次取樣率。將其設定為 0.5 表示 XGBoost 會隨機收集一半的資料執行個體來培養樹。這可避免過度擬合。

選用

有效值:浮點數。範圍:[0,1]。

預設值:1

tree_method

XGBoost 中使用的樹建構演算法。

選用

有效值:autoexactapproxhist 的其中之一。

預設值:auto

tweedie_variance_power

控制 Tweedie 分發的方差之參數。

選用

有效值:浮點數。範圍:(1, 2)。

預設值:1.5

updater

以逗號分隔的字串,用於定義要執行的樹更新工具序列。這提供模組化方式來建構和修改樹。

如需有效輸入的完整清單,請參閱 XGBoost 參數

選用

有效值:逗號分隔字串。

預設值:grow_colmaker、prune

調校 XGBoost 0.72 版模型

自動模型調校,又稱為超參數調校,會透過在您的訓練和驗證資料集上,執行許多測試超參數範圍的任務,來尋找最佳版本的模型。您可以選擇三種類型的超參數:

  • 學習 objective 功能,用於在模型訓練期間最佳化

  • eval_metric,用於在驗證期間評估模型效能

  • 一組超參數和一系列值,各別用於自動調校模型

您可以從演算法計算的評估指標集中,選擇評估指標。自動模型調校會搜尋所選擇的超參數,以找出產生之模型可最佳化評估指標的值組合。

如需模型調校的詳細資訊,請參閱使用 SageMaker AI 自動調校模型

XGBoost 0.72 版演算法所計算的指標

以 0.72 版為基礎的 XGBoost 演算法會運算以下九個指標,並使用這些指標進行模型驗證。調校模型時,請選擇這些指標的其中之一來評估模型。如需有效 eval_metric 值的完整清單,請參閱 XGBoost 學習任務參數

指標名稱 描述 最佳化方向
validation:auc

曲線下的區域。

最大化

validation:error

二元分類錯誤率,計算方式為 #(錯誤案例)/#(所有案例)。

最小化

validation:logloss

不記錄的機率。

最小化

validation:mae

絕對平均值錯誤。

最小化

validation:map

平均值的平均精度。

最大化

validation:merror

多類別分類錯誤率,計算方式為 #(錯誤案例)/#(所有案例)。

最小化

validation:mlogloss

多類別分類的不記錄機率。

最小化

validation:ndcg

正規化的折扣累計收益。

最大化

validation:rmse

均方根錯誤。

最小化

可調校的 XGBoost 0.72 版超參數

使用下列超參數調校 XGBoost 模型。對 XGBoost 評估指標最佳化影響最大的超參數為:alphamin_child_weightsubsampleetanum_round

參數名稱 參數類型 建議範圍
alpha

ContinuousParameterRanges

MinValue:0、MaxValue:1000

colsample_bylevel

ContinuousParameterRanges

MinValue:0.1、MaxValue:1

colsample_bytree

ContinuousParameterRanges

MinValue:0.5、MaxValue:1

eta

ContinuousParameterRanges

MinValue:0.1、MaxValue:0.5

gamma

ContinuousParameterRanges

MinValue:0、MaxValue:5

lambda

ContinuousParameterRanges

MinValue:0、MaxValue:1000

max_delta_step

IntegerParameterRanges

[0, 10]

max_depth

IntegerParameterRanges

[0, 10]

min_child_weight

ContinuousParameterRanges

MinValue:0、MaxValue:120

num_round

IntegerParameterRanges

[1, 4000]

subsample

ContinuousParameterRanges

MinValue:0.5、MaxValue:1