【機器學習】樹類模型總結

目錄

 

前言

決策樹算法

Bagging——RF

Boosting——GBDT、XGBOOST、LIGHTGBM、CATBOOST


前言

想對自己所學的東西進行一個總結。

決策樹算法

決策樹學習的算法通常是一個遞歸地選擇最優特徵,並根據該特徵對訓練數據進行分割,使得對各個子數據集有一個最好的分類的過程。

1. ID3

  • 信息增益:表示得知特徵X的信息而使得類Y的信息的不確定性減少的程度
  • 使用信息增益準則選擇特徵
  • 分裂至信息增益很小或者沒有特徵可選爲止
  • 只有樹的生成,容易過過擬合

2. C4.5

  • 信息增益傾向於選擇取值較多的特徵,所以C4.5在ID3基礎上利用信息增益比

3. CART

  • 考慮了剪枝,CART算法由特徵選擇、決策樹生成、決策樹剪枝
  • 特徵選擇:迴歸樹用平方誤差最小化準則,分類樹用基尼指數最小化原則
  • 決策樹生成:基於訓練集生成決策樹,樹儘量大
  • 決策樹剪枝:用驗證數據集對已生成的樹進行剪枝並選擇最優子樹,這時用損失函數最小作爲剪枝標準
  • 熵與基尼指數:熵是描述隨機變量的不確定性,基尼指數描述的是集合的不確定性

Bagging——RF

  • Bagging:給定一個大小爲n的訓練集D,Bagging算法從中均勻、有放回地(即使用自助抽樣法,bootstrap)選出m個大小爲n'的子集Di,作爲新的訓練集。在這m個訓練集上使用分類、迴歸等算法,則可得到m個模型,再通過取平均值(迴歸)、投票(分類)等方法,即可得到Bagging的結果。

RF

  • 隨機森林採用了Bagging的思想,基分類器可以是迴歸數、分類樹
  • 可以用來解決分類和迴歸問題,因爲基分類器可以是迴歸樹、分類樹。
  • RF具有較好的準確率,減小方差。
  • 能夠有效地運行在大數據集上,或者高維數據集,特徵子集隨機選擇的。可以評估特徵的重要性。(可以參考博客:https://www.cnblogs.com/justcxtoworld/p/3447231.html
  • 對數據缺失不敏感
  • 可以並行進行,因爲每棵樹都是獨立的。

Boosting——GBDT、XGBOOST、LIGHTGBM、CATBOOST

  • Boosting可以用來提高其他弱分類算法的識別率,也就是將其他的弱分類算法作爲基分類算法放於Boosting 框架中,通過Boosting框架對訓練樣本集的操作,得到不同的訓練樣本子集,用該樣本子集去訓練生成基分類器;每得到一個樣本集就用該基分類算法在該樣本集上產生一個基分類器,這樣在給定訓練輪數 n 後,就可產生 n 個基分類器,然後Boosting框架算法將這 n個基分類器進行加權融合,產生一個最後的結果分類器
  • Boosting方法訓練基分類器時採用串行的方式,各個基分類器之間有依賴。它的基本思路是將基分類器層層疊加,每一層在訓練的時候,對前一層基分類器分錯的樣本,給予更高的權重。測試時,根據各層分類器的結果的加權得到最終結果。

GBDT

  • 基分類器是決策迴歸樹。
  • 每一輪迭代,對所有樣本進行訓練,目標是去擬合上一輪的殘差(預測值和真實值的差)
  • 當損失函數是均方誤差時,求導後的梯度即爲殘差
  • 當損失函數爲其他時,用當前基分類器的負梯度去近似代替殘差

上式爲損失函數的一階泰勒展開,T爲殘差,這個時候T如果選擇負梯度,那麼L後面的一部分就是減去梯度的平方,則損失函數一定可以收斂。

  • 串行進行

Xgboost

  • 箭頭所指爲損失函數,方框處爲正則項,橢圓處是常數項
  • 對於損失函數,展開至泰勒二階導,f(t)爲當前的樹

  • 上圖爲正則化項,T爲葉子個數,w爲葉子節點的分數
  • 目標函數只依賴於每個數據點在誤差函數上的一階導數g和二階導數h
  • 分裂節點:枚舉所有不同樹結構的貪心法,計算分裂增益。對於所有的特徵x,我們只要做一遍從左到右的掃描就可以枚舉出所有分割的梯度和GL和GR。然後用計算Gain的公式計算每個分割方案的分數就可以了
  • 分裂節點:近似算法。對於某個特徵k,算法首先根據特徵分佈的分位數找到特徵切割點的候選集合Sk​={sk1​,sk2​,...,skl​},然後將特徵kkk的值根據集合Sk劃分到桶(bucket)中,接着對每個桶內的樣本統計值G、H進行累加統計,最後在這些累計的統計量上尋找最佳分裂點。有兩種近似算法,一種是全局算法,即在初始化tree的時候劃分好候選分割點,並且在樹的每一層都使用這些候選分割點;另一種是局部算法,即每一次劃分的時候都重新計算候選分割點。(建議參考https://blog.csdn.net/anshuai_aw1/article/details/83025168
  • Level-wise迭代方式:XGBoost採用的是按層生長level(depth)-wise生長策略,能夠同時分裂同一層的葉子,從而進行多線程優化,不容易過擬合;但不加區分的對待同一層的葉子,帶來了很多沒必要的開銷。因爲實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂。
  • 預排序:首先,空間消耗大。這樣的算法需要保存數據的特徵值,還保存了特徵排序的結果(例如排序後的索引,爲了後續快速的計算分割點),這裏需要消耗訓練數據兩倍的內存。其次時間上也有較大的開銷,在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價大。

LightGBM

  • 可以參考(https://www.biaodianfu.com/lightgbm.html
  • 相比Xgboost的優點:更快更準內存低,可以並行學習,可以處理大規模數據,支持直接使用類別特徵。
  • LightGBM使用的是histogram算法,佔用的內存更低,數據分隔的複雜度更低。其思想是將連續的浮點特徵離散成k個離散值,並構造寬度爲k的Histogram。然後遍歷訓練數據,統計每個離散值在直方圖中的累計統計量。在進行特徵選擇時,只需要根據直方圖的離散值,遍歷尋找最優的分割點。消耗的內存降低,計算也降低。同時相當於增加了正則,放棄了數據的差異。同時直方圖做差也加快了計算
  • 使用了帶有深度限制的按葉子生長 (leaf-wise)算法。LightGBM採用leaf-wise生長策略,每次從當前所有葉子中找到分裂增益最大的一個葉子,然後分裂,如此循環。因此同Level-wise相比,在分裂次數相同的情況下,Leaf-wise可以降低更多的誤差,得到更好的精度。Leaf-wise的缺點是可能會長出比較深的決策樹,產生過擬合。因此LightGBM在Leaf-wise之上增加了一個最大深度的限制,在保證高效率的同時防止過擬合。
  • 直接支持類別特徵
  • 離散特徵分到bin中,個數較少的bin過濾掉
  • 支持高效並行:特徵並行,不同機器在不同特徵集上分別尋找最優分裂點,通過在本地保存全部數據避免對數據切分結果的通信;。數據並行,不同機器擁有不同數據集本地構建直方圖,再全局合併,找到最佳分裂點。用分散規約(Reduce scatter)把直方圖合併的任務分攤到不同的機器,降低通信和計算,並利用直方圖做差,進一步減少了一半的通信量。
  • LightGBM可以不需要通過所有樣本計算信息增益了,而且內置特徵降維技術,所以更快。可以參考(https://zhuanlan.zhihu.com/p/89360721),GOSS(單邊梯度採樣法)和EFB(互斥特徵綁定)。
  • GOSS:如果一個樣本的梯度較小,證明這個樣本訓練的誤差已經很小了,所以不需要計算了。爲了不改變數據的分佈,在保留大梯度樣本的同時,隨機地保留一些小梯度樣本,同時放大了小梯度樣本帶來的信息增益。這樣說起來比較抽象,我們過一遍流程: 首先把樣本按照梯度排序,選出梯度最大的a%個樣本,然後在剩下小梯度數據中隨機選取b%個樣本,在計算信息增益的時候,將選出來b%個小梯度樣本的信息增益擴大 (1 - a )/ b 倍。這樣就會避免對於數據分佈的改變。
  • EFB:特徵降維技術。舉個例子,對於一列特徵[1,nan,1,nan,1]和一列特徵[nan,1,nan,1,nan],他們正好可以合併成一列特徵[1,2,1,2,1]。目標就是在於找到這樣的特徵並且將他們合併在一起。能減少維度,又能將它們分出來。

CatBoost

  • 網上資料不多,大致瞭解可以參考https://www.jianshu.com/p/49ab87122562
  • 它自動採用特殊的方式處理類別型特徵(categorical features)。首先對類別型特徵做一些統計,計算某個類別特徵出現的頻率,之後加上超參數,生成新的數值型特徵。

  • catboost還使用了組合類別特徵,可以利用到特徵之間的聯繫,這極大的豐富了特徵維度

  • catboost的基模型採用的是對稱樹,同時計算leaf-value方式和傳統的boosting算法也不一樣,傳統的boosting算法計算的是平均數,而catboost在這方面做了優化採用了其他的算法,這些改進都能防止模型過擬合

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