Categories
程式開發

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升


在本文中,我們將仔細研究一個名為CatBoost的梯度增強庫。

在梯度提升中,預測是由一群弱學習者做出的。與為每個樣本創建決策樹的隨機森林不同,在梯度增強中,樹是一個接一個地創建的。模型中的先前樹不會更改。前一棵樹的結果用於改進下一棵樹。在本文中,我們將仔細研究一個名為CatBoost的梯度增強庫。

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 1

CatBoost 是Yandex“開發的深度方向梯度增強庫 。它使用遺忘的決策樹來生成平衡樹。相同的功能用於對樹的每個級別進行左右拆分。

(CatBoost官方鏈接:https://github.com/catboost)

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 2

與經典樹相比,遺忘樹在CPU上實現效率更高,並且易於安裝。

處理分類特徵

在機器學習中處理分類的常見方法是單熱編碼和標籤編碼。 CatBoost允許您使用分類功能,而無需對其進行預處理。

使用CatBoost時,我們不應該使用一鍵編碼,因為這會影響訓練速度以及預測質量。相反,我們只需要使用cat_features 參數指定分類特徵即可 。

使用CatBoost的優點

以下是考慮使用CatBoost的一些原因:

CatBoost允許在多個GPU上訓練數據。使用默認參數可以提供很好的結果,從而減少了參數調整所需的時間。由於減少了過度擬合,因此提高了精度。使用CatBoost的模型應用程序進行快速預測。經過訓練的CatBoost模型可以導出到Core ML進行設備上推理(iOS)。可以在內部處理缺失值。可用於回歸和分類問題。

訓練參數

讓我們看一下CatBoost中的常用參數:

loss_function 別名為 objective -用於訓練的指標。這些是回歸指標,例如用於回歸的均方根誤差和用於分類的對數損失。 eval_metric —用於檢測過度擬合的度量。 iterations -待建的樹的最大數量,默認為1000。別名是 num_boost_round, n_estimators和 num_trees。 learning_rate 別名 eta -學習速率,確定模型將學習多快或多慢。默認值通常為0.03。 random_seed 別名 random_state —用於訓練的隨機種子。 l2_leaf_reg 別名 reg_lambda —成本函數的L2正則化項的係數。默認值為3.0。 bootstrap_type —確定對象權重的採樣方法,例如貝葉斯,貝努利,MVS和泊松。 depth —樹的深度。 grow_policy —確定如何應用貪婪搜索算法。它可以是 SymmetricTree, Depthwise或 Lossguide。 SymmetricTree 是默認值。在中 SymmetricTree,逐級構建樹,直到達到深度為止。在每個步驟中,以相同條件分割前一棵樹的葉子。當 Depthwise 被選擇,一棵樹是內置一步步驟,直到指定的深度實現。在每個步驟中,將最後一棵樹級別的所有非終端葉子分開。使用導致最佳損失改善的條件來分裂葉子。在中 Lossguide,逐葉構建樹,直到達到指定的葉數。在每個步驟中,將損耗改善最佳的非終端葉子進行拆分min_data_in_leaf 別名 min_child_samples —這是一片葉子中訓練樣本的最小數量。此參數僅與 Lossguide 和 Depthwise 增長策略一起使用。 max_leaves alias num_leaves —此參數僅與Lossguide 策略一起使用, 並確定樹中的葉子數。 ignored_features —表示在培訓過程中應忽略的功能。 nan_mode —處理缺失值的方法。選項包括 Forbidden, Min,和 Max。默認值為 Min。當 Forbidden 使用時,缺失值導致錯誤的存在。使用 Min,缺少的值將作為該功能的最小值。在中 Max,缺失值被視為特徵的最大值。 leaf_estimation_method —用於計算葉子中值的方法。在分類中,使用10 Newton 次迭代。使用分位數或MAE損失的回歸問題使用一次 Exact 迭代。多分類使用一次 Netwon 迭代。 leaf_estimation_backtracking —在梯度下降過程中使用的回溯類型。默認值為 AnyImprovement。 AnyImprovement 減小下降步長,直至損失函數值小於上次迭代的值。 Armijo 減小下降步長,直到滿足 Armijo條件” 。boosting_type —加強計劃。它可以plain 用於經典的梯度增強方案,也可以 用於或 ordered,它在較小的數據集上可以提供更好的質量。score_function — 分數類型,” 用於在樹構建過程中選擇下一個拆分。 Cosine 是默認選項。其他可用的選項是L2, NewtonL2和NewtonCosine。early_stopping_rounds —當時True,將過擬合檢測器類型設置為, Iter 並在達到最佳度量時停止訓練。classes_count —多重分類問題的類別數。task_type —使用的是CPU還是GPU。CPU是默認設置。devices —用於訓練的GPU設備的ID。cat_features —具有分類列的數組。text_features -用於在分類問題中聲明文本列。

回歸示例

CatBoost在其實施中使用scikit-learn標準。讓我們看看如何將其用於回歸。

與往常一樣,第一步是導入回歸器並將其實例化。

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 3

擬合模型時,CatBoost還可以通過設置來使用戶可視化 plot=true:

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 4

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 5

它還允許您執行交叉驗證並使過程可視化:

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 6

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 7

同樣,您也可以執行網格搜索並將其可視化:

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 8

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 9

我們還可以使用CatBoost繪製樹。這是第一棵樹的情節。從樹上可以看到,每個級別的葉子都在相同的條件下被分割,例如297,值> 0.5。

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 10

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 11

CatBoost還為我們提供了包含所有模型參數的字典。我們可以通過遍歷字典來打印它們。

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 12

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 13

結尾

在本文中,我們探討了CatBoost的優點和局限性以及主要的訓練參數。然後,我們使用scikit-learn完成了一個簡單的回歸實現。希望這可以為您提供有關庫的足夠信息,以便您可以進一步探索它。

往期精彩鏈接:

《統計學習基礎:數據挖掘、推理和預測》-斯坦福大學人工智能學科專用教材

你聽過CatBoost嗎?本文教你如何使用CatBoost進行快速梯度提升 14