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

2021-02-20 計算機與AI

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

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

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

(CatBoost官方連結:https://github.com/catboost)

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

處理分類特徵

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

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

 

使用CatBoost的優點

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

 

訓練參數

 
讓我們看一下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還可以通過設置來使用戶可視化 plot=true:

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

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

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

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

結尾

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

往期精彩連結:

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

數值方法的聖經-《應用數值方法(MATLAB實現)》第二版


相關焦點

  • 聊聊CatBoost
    CatBoost(categorical boosting)是由Yandex公司(Yandex公司服務範圍有搜索、新聞、地圖、百科、電子信箱、電子商務、網際網路廣告等,Yandex在俄羅斯本地搜尋引擎的市場份額非常大)在機器學習頂級會議NIPS 2017(Neural Information Processing Systems)提出的一種能夠很好地處理類別型特徵的梯度提升算法庫
  • 深入理解CatBoost
    Catboost還使用了組合類別特徵,可以利用到特徵之間的聯繫,這極大的豐富了特徵維度。採用排序提升的方法對抗訓練集中的噪聲點,從而避免梯度估計的偏差,進而解決預測偏移的問題。2.在每個步驟中使用的梯度都使用當前模型中的相同的數據點來估計,這導致估計梯度在特徵空間的任何域中的分布與該域中梯度的真實分布相比發生了偏移,從而導致過擬合。為了解決這個問題,CatBoost對經典的梯度提升算法進行了一些改進,簡要介紹如下。
  • 技術詳解 | catboost完全指南(下)
    接上篇——技術詳解 | catboost完全指南(中),介紹了catboost的基學習器、模型、模型的學習、樹的生成、分裂查找算法,以及一些重要改進後,今天繼續往下。原文首先介紹了prediction shift,然後介紹為了解決prediction shift才誕生的order boosting:為了方便理解不考慮行列採樣的問題,假設我們始終使用全量數據訓練,則每一輪梯度的擬合(即每一棵樹的訓練)都是在全部的數據上進行的,作者認為,訓練集上的條件分布:
  • CatBoost:專治類別型特徵的Boosting算法
    三、預測偏移3.1 梯度提升算法的基本概念首先來說說梯度提升 (gradient boosting) 的整體迭代過程:梯度提升算法通過對一組弱分類器 串行迭代,最終得到一個強學習器 ,以此來提高分類器的擬合精度。
  • 大戰三回合:XGBoost、LightGBM和Catboost一決高低
    Catboost( Categorical Features+Gradient Boosting)採用的策略在降低過擬合的同時保證所有數據集都可用於學習。性能卓越、魯棒性與通用性更好、易於使用而且更實用。據其介紹 Catboost 的性能可以匹敵任何先進的機器學習算法。
  • 入門 | 從結構到性能,一文概述XGBoost、Light GBM和CatBoost的同與不同
    本文從算法結構差異、每個算法的分類變量時的處理、算法在數據集上的實現等多個方面對 3 種代表性的 boosting 算法 CatBoost、Light GBM 和 XGBoost 進行了對比;雖然本文結論依據於特定的數據集,但通常情況下,XGBoost 都比另外兩個算法慢。
  • 從結構到性能,一文概述XGBoost、Light GBM和CatBoost的同與不同
    本文從算法結構差異、每個算法的分類變量時的處理、算法在數據集上的實現等多個方面對 3 種代表性的 boosting 算法 CatBoost、Light GBM 和 XGBoost 進行了對比;雖然本文結論依據於特定的數據集,但通常情況下,XGBoost 都比另外兩個算法慢。
  • 【機器學習】XGBoost算法學習小結
    由於其高效的C++實現,xgboost在性能上超過了最常用使用的R包gbm和Python包sklearn。例如在Kaggle的希格斯子競賽數據上,單線程xgboost比其他兩個包均要快出50%,在多線程上xgboost更是有接近線性的性能提升。由於其性能和使用便利性,xgboost已經在Kaggle競賽中被廣泛使用[1]。
  • 資源 | XGBoost 中文文檔開放:上去就是一把梭
    中文文檔地址:http://xgboost.apachecn.org/cn/latest/英文文檔地址:http://xgboost.apachecn.org/en/latest/中文文檔 GitHub 地址:https://github.com/apachecn/xgboost-doc-zh梯度提升樹已經在實踐中證明可以有效地用於分類和回歸任務的預測挖掘
  • 資料|陳天奇介紹Xgboost原理的PPT
    from=leiphonecolumn_res0929【 圖片來源:https://xgboost.apachecn.org/所有者:https://xgboost.apachecn.org/ 】內容簡介陳天奇介紹Xgboost原理的PPT,用於學習xgboost原理。XGBoost是一個優化的分布式梯度增強庫,旨在實現高效,靈活和便攜。
  • 從零解讀 Xgboost 算法 (原理+代碼)
    代碼匯總3.0 xgboost 如何篩選特徵重要程度3.1 xgboost完整訓練代碼xgboost 代碼調參xgboost常規面試題參考連結0.提升樹 首先要明確一點,xgboost 是基於提升樹的。
  • Python XGBoost算法代碼實現和篩選特徵應用
    XGBoost(eXtreme Gradient Boosting)是工業界逐漸風靡的基於GradientBoosting算法的一個優化的版本,可以給預測模型帶來能力的提升。   回歸樹的分裂結點對於平方損失函數,擬合的就是殘差;對於一般損失函數(梯度下降),擬合的就是殘差的近似值,分裂結點劃分時枚舉所有特徵的值,選取劃分點。
  • 第113天: Python XGBoost 算法項目實戰
    一個已訓練的xgboost模型能夠自動計算特徵重要性,這些重要性得分可以通過成員變量feature_importances_得到。梯度提升算法是如何計算特徵重要性的?使用梯度提升算法的好處是在提升樹被創建後,可以相對直接地得到每個屬性的重要性得分。
  • 快速上手:在R中使用XGBoost算法
    2015年8月,Xgboost的R包發布,我們將在本文引用0.4-2版本的xgboost包。在這篇文章中,我講解釋一個簡單的方式來使用xgboost在R中。 因此,下次當你建立一個模型時可以考慮一下這個算法。我確信這是一個令人驚豔和幸福的時刻。什麼是 XGBoost?
  • 使用cat命令在Linux中組合文本文件
    在本教程中,您將學習如何使用cat命令將兩個或多個文件中的文本合併為一個文件。 這將幫助您從普通初學者獲得Ubuntu上的高級用戶狀態。 我們在Ubuntu 18.04 LTS系統上運行了本教程中提到的命令。我們在本文中提供一些示例,它們將幫助您在以下四種方案中理解cat命令的正確用法:注意:在更改內容之前備份重要文件是一種很好的做法。
  • 阿迪達斯是潮牌嗎?boost為何讓人迷戀不舍,這幾雙鞋你有嗎
    2013年,Adidas推出了boost科技,從此為自己打開了一個全新的時代。因其具有極強的能量反饋能力,迅速帶來了一大批追隨者,並且在技術上做到了和Nike相抗衡。boost作為現在阿迪達斯的主要核心技術,已經充分運用到yeezy系列,同時經典的Stan Smith和EQT系列也都使用了這項技術,直到現在,不管你在哪,搭配boost科技的鞋子都隨處可見。
  • Wish :如何設置 ProductBoost 推廣活動?
    若商戶使用的 ERP 已添加「intense_boost」屬性(此屬性為可選屬性),則其也可使用 API 啟用 IntenseBoost,即在使用以下 API 埠時將「intense_boost」屬性設為「True」: v2/product-boost/campaign/create
  • 媲美ultra boost!阿迪solar是什麼來頭?
    與ultra boost相似但是外形更加新潮,它的配色獨特,有一種強烈但又不失風格的拼裝感,相當有顏值。solar使用的中底材料是非常具有個性化名稱的solar boost,而且用量很大,近乎於全掌。雖然在此之前也有一雙搭載solar boost的鞋子,不過那個款式現在已經停產了。而且在顏值上,不如現在的solar。
  • cat是貓,fat cat就是大肥貓?這樣直譯你就大錯特錯了!
    Fat Cat千萬不要按照字面意思上把「fat cat」直譯為「肥貓」,這樣你就大錯特錯了。其實該短語真正的意思是指那些擁有大量的財富和權力的人。如果勾勒一個富人的典型形象,畫面很可能會是一隻肥碩的貓。