CatBoost之算法解析(Kaggle常用模型)

catboost 簡介

CatBoost據說是超越LightGBM和XGBoost的一大神器。

catboos的三個貢獻點

  • 它自動採用特殊的方式處理類別型特徵(categorical features)。首先對categorical features做一些統計,計算某個類別特徵(category)出現的頻率,之後加上超參數,生成新的數值型特徵(numerical features)。這也是我在這裏介紹這個算法最大的motivtion,有了catboost,再也不用手動處理類別型特徵了。
  • catboost還使用了組合類別特徵,可以利用到特徵之間的聯繫,這極大的豐富了特徵維度。
  • catboost的基模型採用的是對稱樹,同時計算leaf-value方式和傳統的boosting算法也不一樣,傳統的boosting算法計算的是平均數,而catboost在這方面做了優化採用了其他的算法,這些改進都能防止模型過擬合。

CatBoost詳細內容技術介紹

1、類別型特徵的處理

CatBoost採用了一種有效的策略,降低過擬合的同時也保證了全部數據集都可用於學習。也就是對數據集進行隨機排列,計算相同類別值的樣本的平均標籤值時,只是將這個樣本之前的樣本的標籤值納入計算。

2、特徵組合

爲當前樹構造新的分割點時,CatBoost會採用貪婪的策略考慮組合。對於樹的第一次分割,不考慮任何組合。對於下一個分割,CatBoost將當前樹的所有組合、類別型特徵與數據集中的所有類別型特徵相結合。組合被動態地轉換爲數字。CatBoost還通過以下方式生成數值型特徵和類別型特徵的組合:樹選擇的所有分割點都被視爲具有兩個值的類別型特徵,並且組合方式和類別型特徵一樣。

3、克服梯度偏差

CatBoost,和所有標準梯度提升算法一樣,都是通過構建新樹來擬合當前模型的梯度。然而,所有經典的提升算法都存在由有偏的點態梯度估計引起的過擬合問題。許多利用GBDT技術的算法(例如,XGBoost、LightGBM),構建一棵樹分爲兩個階段:選擇樹結構和在樹結構固定後計算葉子節點的值。爲了選擇最佳的樹結構,算法通過枚舉不同的分割,用這些分割構建樹,對得到的葉子節點中計算值,然後對得到的樹計算評分,最後選擇最佳的分割。兩個階段葉子節點的值都是被當做梯度或牛頓步長的近似值來計算。CatBoost第一階段採用梯度步長的無偏估計,第二階段使用傳統的GBDT方案執行。

4、快速評分

CatBoost使用oblivious樹作爲基本預測器,這種樹是平衡的,不太容易過擬合。oblivious樹中,每個葉子節點的索引可以被編碼爲長度等於樹深度的二進制向量。CatBoost首先將所有浮點特徵、統計信息和獨熱編碼特徵進行二值化,然後使用二進制特徵來計算模型預測值。

5、基於GPU實現快速學習

5.1 密集的數值特徵
任何GBDT算法,對於密集的數值特徵數據集來說,搜索最佳分割是建立決策樹時的主要計算負擔。CatBoost利用oblivious決策樹作爲基礎模型,並將特徵離散化到固定數量的箱子中以減少內存使用。就GPU內存使用而言,CatBoost至少與LightGBM一樣有效。主要改進之處就是利用了一種不依賴於原子操作的直方圖計算方法。
5.2 類別型特徵
CatBoost使用完美哈希來存儲類別特徵的值,以減少內存使用。由於GPU內存的限制,在CPU RAM中存儲按位壓縮的完美哈希,以及要求的數據流、重疊計算和內存等操作。通過哈希來分組觀察。在每個組中,我們需要計算一些統計量的前綴和。該統計量的計算使用分段掃描GPU圖元實現。
5.3 多GPU支持
CatBoost中的GPU實現可支持多個GPU。分佈式樹學習可以通過數據或特徵進行並行化。CatBoost採用多個學習數據集排列的計算方案,在訓練期間計算分類特徵的統計數據。

CatBoost的優點

  • 性能卓越:在性能方面可以匹敵任何先進的機器學習算法;
  • 魯棒性/強健性:它減少了對很多超參數調優的需求,並降低了過度擬合的機會,這也使得模型變得更加具有通用性;
  • 易於使用:提供與scikit集成的Python接口,以及R和命令行界面;
  • 實用:可以處理類別型、數值型特徵;可擴展:支持自定義損失函數;

更爲詳細的一點內容

1、Catboost使用對稱樹

XGboost一層一層地建立節點,lightGBM一個一個地建立節點,而Catboost總是使用完全二叉樹。它的節點是鏡像的。Catboost稱對稱樹有利於避免overfit,增加可靠性,並且能大大加速預測等等。

2、它用特殊的方式處理categorical features

首先他們會計算一些數據的statistics。計算某個category出現的頻率,加上超參數,生成新的numerical features。這一策略要求同一標籤數據不能排列在一起(即先全是0之後全是1這種方式),訓練之前需要打亂數據集。第二,使用數據的不同排列(實際上是4個)。在每一輪建立樹之前,先扔一輪骰子,決定使用哪個排列來生成樹。第三,考慮使用categorical features的不同組合。例如顏色和種類組合起來,可以構成類似於blue dog這樣的feature。當需要組合的categorical features變多時,catboost只考慮一部分combinations。在選擇第一個節點時,只考慮選擇一個feature,例如A。在生成第二個節點時,考慮A和任意一個categorical feature的組合,選擇其中最好的。就這樣使用貪心算法生成combinations。第四,除非向gender這種維數很小的情況,不建議自己生成one-hot vectors,最好交給算法來處理。

3、catboost和其他算法計算leaf-value的方法不同

傳統的boosting使用平均數,但這個估計是有偏的,會導致過擬合。而Catboost則採用另外的計算方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章