Catboost:超越Lightgbm和XGBoost的又一個boost演算法神器

  • 2019 年 10 月 28 日
  • 筆記

今天介紹一個超級簡單並且又極其實用的boosting演算法包Catboost,據開發者所說這一boosting演算法是超越Lightgbm和XGBoost的又一個神器。

論文鏈接

https://arxiv.org/pdf/1706.09516.pdf

它可以很容易地與Google的TensorFlow和蘋果的核心ML等深度學習框架集成。它可以處理各種數據類型,如音頻、文本、影像(包括歷史數據)。幫助解決當今企業面臨的各種問題。最重要的是,它提供了強大的準確性。

它在兩方面特彆強大:

它不需要其他機器學習方法通常需要的大量數據培訓,就能得到最先進的結果

為伴隨許多業務問題而來的更具描述性的數據格式提供強大的支援

CatBoost名稱來源於「Category」和「boost」兩個單詞。其中「Boost」來源於梯度增強機器學習演算法,因為這個庫是基於梯度增強庫的。梯度增強是一種功能強大的機器學習演算法,廣泛應用於欺詐檢測、推薦項、預測等多種類型的業務挑戰,具有良好的性能。它還可以以相對較少的數據返回非常好的結果,不像DL模型需要從大量數據中學習。

一、 CatBoost庫的優點

性能:CatBoost提供最先進的結果,在性能方面與任何領先的機器學習演算法相比都具有競爭力。

自動處理分類特徵:CatBoost無需對數據特徵進行任何顯式的預處理就可以將類別轉換為數字。CatBoost使用關於分類特徵組合以及分類和數字特徵組合的各種統計資訊將分類值轉換為數字。

魯棒性:它減少了對廣泛的超參數優化的需要,並降低了過擬合的機會,這也會導致更一般化的模型。CatBoost的參數包括樹的數量、學習率、正則化、樹的深度、摺疊尺寸、裝袋溫度等。

易於使用:您可以從命令行使用CatBoost為Python和R用戶提供方便的API。

二、CatBoost與其他boost庫進行比較

我們有多個boost庫,如XGBoost、H2O和LightGBM,它們都能很好地解決各種問題。CatBoost在標準ML數據集上與競爭對手進行了性能對比:

上面的對比顯示了測試數據的log-loss值,在大多數情況下CatBoost的log-loss值是最低的。它清楚地表明,CatBoost在調優和默認模型上的性能都更好。除此之外,CatBoost不需要將數據集轉換為任何特定格式。

Python安裝:

pip install catboost

四、使用CatBoost解決ML挑戰

CatBoost庫既可以解決分類問題,也可以解決回歸問題。對於分類,您可以使用「CatBoostClassifier」和「CatBoostRegressor」進行回歸。

在本文中,我將使用CatBoost解決「Big Mart Sales」實踐問題。這是一個回歸的挑戰,所以我們將使用CatBoostRegressor。

完整程式碼

案例一

AI項目體驗地址 https://loveai.tech

案例二

這裡我們可以觀察一下數據的特徵列,這裡有很多列特徵比如廣告的寬高,是否可以下載,是否會跳轉等一些特徵,而且特徵的數據類型各不一樣,有數值型(creative_height),布爾型(creative_is_js)等不同類型的特徵。

下圖我們對所有特徵做了一個統計,發現整個訓練數據集一共有34列,除去標籤列,整個數據集一共有33個特徵,其中6個為布爾型特徵,2個為浮點型特徵,18個整型特徵,還有8個對象型特徵。

如果按照正常的演算法,此時應該將非數值型特徵通過各種數據預處理手段,各種編碼方式轉化為數值型特徵。而在catboost中你根本不用費心干這些,你只需要告訴演算法,哪些特徵屬於類別特徵,它會自動幫你處理。程式碼如下所示:

最後就是將數據餵給演算法,訓練走起來。

將plot = ture 打開後,catboot包還提供了非常炫酷的訓練可視化功能,從下圖可以看到我的Logloss正在不停的下降。

訓練結束後,通過model.feature_importances_屬性,我們可以拿到這些特徵的重要程度數據,特徵的重要性程度可以幫助我們分析出一些有用的資訊。

執行上方程式碼,我們可以拿到特徵重要程度的可視化結構,從下圖我們發現campaign_id是用戶是否點擊這個廣告的最關鍵的影響因子。

至此整個catboot的優點和使用方法都介紹完了,是不是覺得十分簡單易用,而且功能強大。深度學習,神經網路減弱了我們對特徵工程的依賴,catboost也在朝著這方面努力。所以有時候碰到需要特別多的前期數據處理和特徵數值化的任務時,可以嘗試用一下catboost