
XGBoost - 超引數
本章將討論 XGBoost 演算法所需或常用超引數的子集。這些引數已被選擇以簡化從資料生成模型引數的過程。本章按類別列出了需要配置的必需超引數。這些超引數是可設定的且可選的。
XGBoost 超引數類別
XGBoost 建立者將所有超引數主要分為三大類:
通用引數
提升器引數
學習任務引數
讓我們在下節討論這三類超引數:
通用引數
通用引數定義了 XGBoost 模型的整體功能和工作方式。以下是此類別中的引數列表:
booster [預設=gbtree]:此引數主要選擇每次迭代執行的模型型別。它提供 2 個選項 - gbtree:基於樹的模型和 gblinear:線性模型。
silent [預設=0]:用於將模型設定為靜默模式。如果啟用並設定為 1,則表示不會列印任何執行訊息。最好保持為 0,因為這些訊息有助於理解模型。
nthread [預設為可用執行緒的最大數量]:主要用於並行處理,應輸入系統中的核心數。如果要在所有核心上執行,則不會輸入值,演算法將自動檢測它。
還有兩個引數 XGBoost 會自動設定,因此您無需擔心它們。
提升器引數
由於有兩種型別的提升器,這裡我們只討論樹提升器,因為它比線性提升器使用頻率低,並且效能始終更好。
引數 | 描述 | 典型值 |
---|---|---|
eta | 類似於學習速率。幫助控制模型在每一步之後的變化程度。 | 0.01-0.2 |
min_child_weight | 樹節點中所需所有觀測值的最小總權重。 | 使用交叉驗證進行調優 |
max_depth | 樹的最深級別。控制過擬合(模型過於特定)。 | 3-10 |
max_leaf_nodes | 樹可以具有的最多葉子(端點)。 | |
gamma | 損失需要減少的最小數量才能分割節點。 | 基於損失函式進行調優 |
max_delta_step | 限制樹的權重可以變化的程度。 | 通常不需要 |
subsample | 用於生長每棵樹的資料比例。 | 0.5-1 |
colsample_bytree | 為每棵樹隨機選擇的列(特徵)的比例。 | 0.5-1 |
colsample_bylevel | 在樹的每一層每個分割處使用的列的比例。 | 通常不使用 |
lambda | L2 正則化(如嶺迴歸),有助於減少過擬合。 | 嘗試減少過擬合 |
alpha | L1 正則化(如 Lasso 迴歸),對於具有許多特徵的模型很有用。 | 適用於高維資料 |
scale_pos_weight | 幫助處理不平衡的資料類別,使模型學習得更快。 | > 0(對於不平衡資料) |
學習任務引數
學習任務引數定義了最佳化的目標和每一步將選擇的指標。
objective [預設=reg:linear]
用於定義要最小化的損失函式。最常用的值如下:
binary:logistic - 指的是二元分類,因為有兩個分類。它返回預期機率而不是實際類別。
multi:softmax - 用於多類別分類。它返回預期類別而不是機率。你還需要設定額外的選項 num_class 來告訴模型有多少個唯一的類別。
multi:softprob - 此函式與 softmax 類似,它提供資料點可能屬於的每個可能類別的機率,而不僅僅是預測的類別。
eval_metric [根據 objective 預設]
評估指標必須與驗證資料一起使用。預設引數是用於錯誤分類和迴歸的 rmse。
典型值如下:
rmse:均方根誤差
mae:平均絕對誤差
logloss:負對數似然
error:二元分類錯誤率(0.5 閾值)
merror:多類別分類錯誤率
mlogloss:多類別對數損失
auc:曲線下面積
seed [預設=0]
這是隨機數種子。它用於生成可重複的結果以及引數調優。
如果您以前從未使用過 Scikit-Learn,則不太可能識別這些引數名稱。但是,Python xgboost 包有一個名為 XGBClassifier 引數的 sklearn 包裝器。它遵循 sklearn 樣式的命名約定。將更改的引數名稱為
eta -> learning_rate
lambda -> reg_lambda
alpha -> reg_alpha