樹模型之Boosting算法總結上篇


上一篇總結了bagging和boosting的區別以及相應的bagging算法,這篇總結boosting對應的算法

ADAboost

Adaboost算法是boosting算法之一,會更多的關注上一次分類器誤分的樣本。訓練時將樣本初始賦一個權重,用這些樣本訓練一個基分類器,根據這個基分類器對樣本的表現調整樣本的權重,如果樣本分類器正確的話,權重降低,如果樣本分類錯誤的話,權重上升。再用調整過的權重的樣本訓練基分類器,反復學習知道分類器個數達到指定個數。對預測樣本的輸出是結合所有基分類器的權重輸出。最小化目標是指數損失函數。

模型評價(准確率,時間,空間,模型復雜度,過擬合,抗噪聲,是否可並行化,調參)

  1. 准確率: 模型的實際效果一般, 我自己做多分類的時候選用ADAboost作為二分類效果並沒有很好.
  2. 時間: 在小數據上, 模型選用簡單的樹模型, 有深度限制並且不需要大量的樹, 所以時間很快
  3. 空間: 需要樹的數量少, 消耗的空間也就小
  4. 模型復雜度:模型稍微優點復雜,主要是樣本的權重調整計算公式上.
  5. 過擬合: 周志華的Margin理論:
    泛化錯誤(泛化錯誤可理解為測試錯誤) < 訓練錯誤 + 學習算法容量相關項 (1)
    泛化錯誤 < 訓練Margin項 + 學習算法容量相關項 (2) Margin:對的信心
    泛化錯誤 < 訓練Margin的最小值 + 學習算法容量相關項 (3) 信心最不足的那個
    泛化錯誤 < 訓練Margin的某個值 + 學習算法容量相關項 (3) 某個信心值
    現實的經驗例子也證明了這一點,AdaBoost不容易過擬合。隨着Margin變大,泛化誤差會收斂
  6. 抗噪聲: 容易受到噪聲的污染
  7. 是否可並行化: 模型不可並行化, 特征可以並行化
  8. 調參: 樹的個數和縮減率,調參是比較容易的.

優點

  1. 不改變訓練數據,只是改變訓練樣本的權重分布,可以重復使用數據
  2. 需要的樹模型個數比bagging少,訓練時間更短,內存需求更小
  3. 吸收bagging的優點,在sklearn中可以隨機選擇樣本和特征

缺點

  1. 過分關注容易錯誤分類的樣本,如果錯誤分類樣本是噪聲點,那么算法容易產生過擬合。
  2. 需要調整每棵樹的參數,確保單棵樹不會過擬合(這也是所有Boosting算法的通病)

GBDT

GBDT是一種迭代的決策回歸樹算法,也是一種典型的Boosting算法。原始的工作流程是:初始化CART回歸樹,針對每個樣本計算殘差,將這個殘差作為新的真實值,用新的數據去訓練下一個CART樹。不斷迭代直到決策樹的個數達到預定義的數量停止,結合所有基分類器的輸出作為最后結果的輸出。(現在已經有了一個模型F,但是覺得它做的不夠好,希望在他的基礎上得到一個更好的模型,所以就新加一個模型h(x), 這樣最后得到的總結果就是F(x)+h(x))。用縮減率改進的工作流程:認為每次走一小步比走一大步更能獲得好的效果,更能防止過擬合。工作流程:仍然以殘差作為學習目標,但是每次只是用step*殘差逐步逼近目標,step一般是0.001-0.1.和神經網絡的的學習率是一樣的。本質上縮減是給每棵樹設置了一個權重系數。所以能取得良好的效果。

QA

  • 為什么要使用回歸決策樹?
    GBDT的核心在於累加所有樹的結果.
     分類樹用於分類, 最后的結果是類別, 如果男女, 這樣累加類別是沒有意義的.
     回歸樹用於預測數值, 最后的結果是實數, 累加起來依然是具有實際意義的.
  • 分類樹和回歸樹的區別是什么?
      分類樹使用信息增益/信息增益率/基尼指數來划分節點, 中間會窮舉所有特征的所有閾值, 最后選擇一個合適的划分特征,最后根據葉子節點的投票確定預測樣本的類別
      回歸樹使用最小化均方差划分節點, 中間會窮舉所有特征的所有划分點, 最后根據葉子節點的樣本均值作為預測樣本的回歸預測值.
  • 為什么將殘差做為真實值?
      GBDT算法本質是一種加法模型,它的目標函數是MSE,導數是\(\tilde{y_i}-y_i\)。所以殘差就是下一步的最優化的反方向。
      每一步的殘差計算其實變相的增大了分錯樣本的權重,而已經分對的樣本則都趨向於0。這樣后面就更加專注於那些分錯的樣本。

模型評價(准確率,時間,空間,模型復雜度, 過擬合,抗噪聲, 是否可並行化,調參)

  1. 准確率: 針對分類和回歸任務都有很好的性能
  2. 時間: 小型的數據上,不需要訓練大量的樹, 模型也比較簡單, 時間復雜度較小。但是在大數據上, 需要對數據進行無數次的遍歷,不能用類似mini batch的方式來訓練。如果想要速度,就需要把數據都預加載在內存中,但這樣數據就會受限於內存的大小;如果想要訓練更多的數據,就要使用外存版本的決策樹算法。雖然外存算法也有較多優化,SSD也在普及,但在頻繁的IO下,速度還是比較慢的。
  3. 空間: 需要較少
  4. 模型復雜度: 模型最后的公式很簡單
  5. 過擬合: 和ADAboost的過擬合效果差不多.
  6. 抗噪聲: 引入樣本隨機和列隨機后可以抵抗噪聲帶來的影響
  7. 是否可並行化:主要是在生成每一顆樹的時候:並行的計算最佳分裂點。每個節點負責一些特征.
  8. 調參:樹的棵樹,縮減率, 采樣率(不放回采樣), 損失函數

Adaboost vs. GBDT

本質來說唯一的差別是Adaboost算法使用log損失函數,GBDT使用平方差損失函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM