

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

# XGBoost 0.72 版
<a name="xgboost-72"></a>

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

```
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")
```

```
import boto3
from sagemaker import image_uris

xgb_image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "1")
```
如果你想使用較新的版本，你必須明確指定圖像 URI 標記 (請參閱[支援的版本](xgboost.md#xgboost-supported-versions))。

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

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

## XGBoost 0.72 版的輸入/輸出介面
<a name="xgboost-72-InputOutput"></a>

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

XGBoost 的 SageMaker AI 實作支援訓練與推論的 CSV 與 libsvm 格式：
+ 針對 Training ContentType，有效輸入為 *text/libsvm* (預設值) 或 *text/csv*。
+ 針對 Inference ContentType，有效輸入為 *text/libsvm* 或 *text/csv* (預設值)。

**注意**  
對於 CSV 訓練，演算法假設目標變數在第一個欄，且 CSV 沒有標題記錄。對於 CSV 推論，演算法假設 CSV 輸入沒有標籤欄。  
針對 libsvm 訓練，演算法假設標籤是在第一個欄中。後續的欄包含特徵的零底索引值對。因此每個資料列的格式皆為：<label> <index0>:<value0> <index1>:<value1> ... libsvm 的推論請求可能有、也可能沒有此 libsvm 格式的標籤。

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

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

SageMaker AI XGBoost 使用 Python 保存模組來序列化/取消序列化模型，可用於儲存/載入模型。

**在開放原始碼 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 執行個體建議
<a name="xgboost-72-Instance"></a>

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

## XGBoost 0.72 版範例筆記本
<a name="xgboost-72-sample-notebooks"></a>

如需展示如何使用最新版 SageMaker AI XGBoost 做為內建演算法，來訓練和託管迴歸模型的範例筆記本，請參閱[使用 Amazon SageMaker AI XGBoost 演算法的迴歸](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_abalone.html)。若要使用 0.72 版的 XGBoost，您需要將範本程式碼中的版本變更為 0.72。如需如何建立並存取 Jupyter 筆記本執行個體以用來執行 SageMaker AI 中範例的指示，請參閱[Amazon SageMaker 筆記本執行個體](nbi.md)。在建立並開啟筆記本執行個體後，請選取 **SageMaker AI 範例**索引標籤以查看所有 SageMaker AI 範例的清單。使用 XGBoost 演算法模組化範例筆記本的主題位於 **Amazon 演算法簡介**一節。若要開啟筆記本，請按一下其**使用**標籤，然後選取**建立複本**。

## XGBoost 0.72 版超參數
<a name="xgboost-72-hyperparameters"></a>

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


| 參數名稱 | Description | 
| --- | --- | 
| num\_class | 類別數。<br />若 `objective` 設為 *multi:softmax* 或 *multi:softprob*，則為**必要**。<br />有效值：整數 | 
| num\_round | 執行訓練的捨入數。<br />**必要**<br />有效值：整數 | 
| alpha | 權重的 L1 正規化詞彙。增加此值可讓模型更為保守。<br />**選用**<br />有效值：浮點數<br />預設值：0 | 
| base\_score | 所有執行個體、全域偏差的初始預測分數。<br />**選用**<br />有效值：浮點數<br />預設值：0.5 | 
| booster | 要使用哪些提升工具。`gbtree` 和 `dart` 值使用樹狀模型，而 `gblinear` 使用線性函式。<br />**選用**<br />有效值：字串。`gbtree`、`gblinear` 或 `dart` 其中之一。<br />預設值：`gbtree` | 
| colsample\_bylevel | 每個層級中的每個分割之欄次取樣率。<br />**選用**<br />有效值：浮點數。範圍：[0,1]。<br />預設值：1 | 
| colsample\_bytree | 建構每棵樹時的欄次取樣率。<br />**選用**<br />有效值：浮點數。範圍：[0,1]。<br />預設值：1 | 
| csv\_weights | 啟用此標記時，XGBoost 會採用訓練資料的第二個欄 (標籤後面的欄) 做為執行個體權重，區隔 csv 輸入的執行個體重要性。<br />**選用**<br />有效值：0 或 1<br />預設值：0 | 
| early\_stopping\_rounds | 模型會一直訓練到驗證分數停止上升為止。驗證錯誤需至少以每 `early_stopping_rounds` 的速率降低才可繼續訓練。SageMaker AI 託管使用最佳模型進行推論。<br />**選用**<br />有效值：整數<br />預設值：- | 
| eta | 用於更新以避免過度擬合的步驟大小收縮。在每個提升步驟後，您可以直接取得新功能的權重。`eta` 參數會縮減功能權重，讓提升程序更保守。<br />**選用**<br />有效值：浮點數。範圍：[0,1]。<br />預設值：0.3 | 
| eval\_metric | 驗證資料的評估指標。預設指標是根據目標指派：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/xgboost-72.html)<br />如需有效輸入清單，請參閱 [XGBoost 參數](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)。<br />**選用**<br />有效值：字串<br />預設值：根據目標預設。 | 
| gamma | 進一步在樹上的葉片節點分區所需的最低遺失縮減量。演算法越大就越保守。<br />**選用**<br />有效值：浮點數。範圍：[0,∞)。<br />預設值：0 | 
| grow\_policy | 控制新增節點到樹的方式。目前只有 `tree_method` 設為 `hist` 時才受支援。<br />**選用**<br />有效值：字串。`depthwise` 或 `lossguide`。<br />預設值：`depthwise` | 
| lambda | 權重的 L2 正規化詞彙。增加此值可讓模型更為保守。<br />**選用**<br />有效值：浮點數<br />預設值：1 | 
| lambda\_bias | 偏差的 L2 正規化詞彙。<br />**選用**<br />有效值：浮點數。範圍：[0.0, 1.0]。<br />預設值：0 | 
| max\_bin | 最大數量的分散式資料匣，以儲存持續功能。僅於 `tree_method` 設為 `hist` 時才使用。<br />**選用**<br />有效值：整數<br />預設值：256 | 
| max\_delta\_step | 每個樹的權重估值允許使用最高差量步驟。使用正整數時，有助於讓更新更為保守。偏好選項是在邏輯回歸中使用。設定為 1-10，以協助控制更新。<br />**選用**<br />有效值：整數。範圍：[0,∞)。<br />預設值：0 | 
| max\_depth | 最大樹深度。增加此值可讓模型更為複雜也更有可能過度擬合。0 表示無限制。當 `grow_policy`=`depth-wise` 時便需要限制。<br />**選用**<br />有效值：整數。範圍：[0,∞)<br />預設值：6 | 
| max\_leaves | 要新增的最大節點數量。只有 `grow_policy` 設為 `lossguide` 時才相關。<br />**選用**<br />有效值：整數<br />預設值：0 | 
| min\_child\_weight | 子系中需要執行個體權重的最低總和 (hessian)。如果葉片節點中的樹狀分區步驟的執行個體權重總和少於 `min_child_weight`，建置程序將提供進一步的分區。在線性回歸模型中，這就是對應各節點中所需的最低執行個體數量。演算法越大就越保守。<br />**選用**<br />有效值：浮點數。範圍：[0,∞)。<br />預設值：1 | 
| normalize\_type | 標準化演算法類型。<br />**選用**<br />有效值：*tree* 或 *forest*。<br />預設值：*tree* | 
| nthread | 用於執行 *xgboost* 的平行執行緒數量。<br />**選用**<br />有效值：整數<br />預設值：最大執行緒數量。 | 
| objective | 指定學習任務和對應的學習目標。範例：`reg:logistic`、`reg:softmax`、`multi:squarederror`。如需有效輸入的完整清單，請參閱 [XGBoost 參數](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)。<br />**選用**<br />有效值：字串<br />預設值：`reg:squarederror` | 
| one\_drop | 當啟用此旗標時，至少有一棵樹一律在退出時刪除。<br />**選用**<br />有效值：0 或 1<br />預設值：0 | 
| process\_type | 要執行的提升程序類型。<br />**選用**<br />有效值：字串。`default` 或 `update`。<br />預設值：`default` | 
| rate\_drop | 退出率，指定在退出時刪除一小部分的舊樹。<br />**選用**<br />有效值：浮點數。範圍：[0.0, 1.0]。<br />預設值：0.0 | 
| refresh\_leaf | 這是 '重新整理' 更新工具外掛程式的參數。當設定為 `true` (1) 時，會更新樹分葉與樹節點的統計資料。當設定為 `false` (0) 時，只更新樹節點的統計資料。<br />**選用**<br />有效值：0/1<br />預設值：1 | 
| sample\_type | 取樣演算法類型。<br />**選用**<br />有效值：`uniform` 或 `weighted`。<br />預設值：`uniform` | 
| scale\_pos\_weight | 控制正負加權的平衡。對於不平衡的分類非常實用。要考慮的典型值：`sum(negative cases)` / `sum(positive cases)`。<br />**選用**<br />有效值：浮點數<br />預設值：1 | 
| seed | 隨機數量種子。<br />**選用**<br />有效值：整數<br />預設值：0 | 
| silent | 0 表示列印執行中的訊息、1 表示靜音模式。<br />有效值：0 或 1<br />**選用**<br />預設值：0 | 
| sketch\_eps | 僅適用於預估值貪婪演算法。這會轉譯為 O(1/`sketch_eps`) 個資料匣。相較於直接選擇資料匣數量，這會搭配含有示意圖精準度的理論保證。<br />**選用**<br />有效值：浮動、範圍：[0, 1]。<br />預設值：0.03 | 
| skip\_drop | 反覆提升時略過退出程序的可能性。<br />**選用**<br />有效值：浮點數。範圍：[0.0, 1.0]。<br />預設值：0.0 | 
| subsample | 訓練執行個體的次取樣率。將其設定為 0.5 表示 XGBoost 會隨機收集一半的資料執行個體來培養樹。這可避免過度擬合。<br />**選用**<br />有效值：浮點數。範圍：[0,1]。<br />預設值：1 | 
| tree\_method | XGBoost 中使用的樹建構演算法。<br />**選用**<br />有效值：`auto`、`exact`、`approx` 或 `hist` 的其中之一。<br />預設值：`auto` | 
| tweedie\_variance\_power | 控制 Tweedie 分發的方差之參數。<br />**選用**<br />有效值：浮點數。範圍：(1, 2)。<br />預設值：1.5 | 
| updater | 以逗號分隔的字串，用於定義要執行的樹更新工具序列。這提供模組化方式來建構和修改樹。<br />如需有效輸入的完整清單，請參閱 [XGBoost 參數](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst)。<br />**選用**<br />有效值：逗號分隔字串。<br />預設值：`grow_colmaker`、prune | 

## 調校 XGBoost 0.72 版模型
<a name="xgboost-72-tuning"></a>

*自動模型調校*，又稱為超參數調校，會透過在您的訓練和驗證資料集上，執行許多測試超參數範圍的任務，來尋找最佳版本的模型。您可以選擇三種類型的超參數：
+ 學習 `objective` 功能，用於在模型訓練期間最佳化
+ `eval_metric`，用於在驗證期間評估模型效能
+ 一組超參數和一系列值，各別用於自動調校模型

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

如需模型調校的詳細資訊，請參閱[使用 SageMaker AI 執行自動模型調校](automatic-model-tuning.md)。

### XGBoost 0.72 版演算法所計算的指標
<a name="xgboost-72-metrics"></a>

以 0.72 版為基礎的 XGBoost 演算法會運算以下九個指標，並使用這些指標進行模型驗證。調校模型時，請選擇這些指標的其中之一來評估模型。如需有效 `eval_metric` 值的完整清單，請參閱 [XGBoost 學習任務參數](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)


| 指標名稱 | Description | 最佳化方向 | 
| --- | --- | --- | 
| validation:auc | 曲線下的區域。 | 最大化 | 
| validation:error | 二元分類錯誤率，計算方式為 \#(錯誤案例)/\#(所有案例)。 | 最小化 | 
| validation:logloss | 不記錄的機率。 | 最小化 | 
| validation:mae | 絕對平均值錯誤。 | 最小化 | 
| validation:map | 平均值的平均精度。 | 最大化 | 
| validation:merror | 多類別分類錯誤率，計算方式為 \#(錯誤案例)/\#(所有案例)。 | 最小化 | 
| validation:mlogloss | 多類別分類的不記錄機率。 | 最小化 | 
| validation:ndcg | 正規化的折扣累計收益。 | 最大化 | 
| validation:rmse | 均方根錯誤。 | 最小化 | 

### 可調校的 XGBoost 0.72 版超參數
<a name="xgboost-72-tunable-hyperparameters"></a>

使用下列超參數調校 XGBoost 模型。對 XGBoost 評估指標最佳化影響最大的超參數為：`alpha`、`min_child_weight`、`subsample`、`eta` 和 `num_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 | 