1. 程式人生 > >秋招材料整理——整合學習

秋招材料整理——整合學習

一、概念

  • 整合方式主要有3種:boostingbaggingstacking
  • 整合學習:將多個弱學習器結合起來組成一個強學習器
    • 個體學習器一般選擇:決策樹,神經網路(整合時可以是同類,也可以是不同類)
    • 什麼時候整合效果好於單個學習器?
      “好而不同”,每個都不是特別差,且有一定的多樣性
      證明:假設錯誤率相互獨立,整體學習器的錯誤率為(個體學習器的錯誤率為 ε):

P(H(x)f(x))P(H(x)\ne f(x))

=k=0T/2(kT)(1ϵ)kϵTk=\sum_{k=0}^{\lfloor T/2\rfloor}(_k^T)(1-\epsilon)^k\epsilon^{T-k}

exp(12T(12ϵ)2)\le exp(-\frac{1}{2}T(1-2\epsilon)^2)

學習器數目 T 逐漸增大,整個學習器的錯誤率將指數級下降,甚至最終趨向於零

二、boosting和bagging 區別

以隨機森林和adaboost為例:

  • 個體學習器間依賴關係上:
    Bagging,隨機森林:個體之間不存在強依賴關係,各個預測函式可並行生成。
    Boosting:個體學習器間存在強依賴,必須序列生成。後一個模型引數需要前一輪的結果.
  • 樣本選擇上:
    Bagging:訓練集是隨機有放回選取的,各輪訓練集之間是獨立的.
    Boosting:訓練集不變,只是樣例的權重發生變化.權值是根據上一輪的分類結果進行調整.
  • 樣例權重:
    Bagging:均勻取樣,每個樣例權重相等
    Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大.
  • 預測函式:
    Bagging:所有預測函式的權重相等.
    Boosting:每個弱分類器都有相應的權重,對於分類誤差小的分類器會有更大的權重

三、隨機森林

(代表整合學習技術水平的方法)(並聯,投票)

  • 樣本產生:隨機有放回抽樣(第一個隨機)
  • 屬性選擇:基學習器是決策樹,訓練決策樹時引入隨機屬性選擇(第二個隨機)(選劃分屬性時,先從屬性集中隨機選擇一個包含k(推薦log2dlog_2d)個屬性的子集,然後再從子集中選使Gini值最小的分割點作為最優屬性用於劃分)
  • 效率常優於Bagging,不易過擬合;噪音比較大時會過擬合

四、boosting(串聯)

  • 根據初始訓練資料訓練出第一個基學習器;
    根據基學習器的表現調整樣本,更多關注之前學習器做錯的樣本,訓練下一個基學習器;
    重複T 次,將 T 個學習器加權結合。
  • 優點:表達能力強,不需要做複雜的特徵工程和特徵變換
  • 缺點:串聯,不好並行化,計算複雜度高,同時不太適合高維

五、GBDT

  • GB中單個學習器為決策樹(迴歸樹:雖然它常用於預測,而不是分類)
  • GBDT有兩種,一種是殘差學習,一種是負梯度代替殘差,為啥用負梯度近似殘差?
    GBDT每次迭代是對之前模型損失函式的梯度下降方向(即偽殘差)進行學習,計算出使下一步損失函式取值最小的偽殘差,從而得出下一步模型,殘差只是在loss用最小二乘時的一個特例,對(xy)2(x-y)^2求梯度剛好就是2(xy)2(x-y),換成其他loss就不對了,所以,殘差學習只是一個特例,負梯度才是通用的

六、adaboost

  • =指數損失(ef(x)H(x)e^{-f(x)H(x)})+boosting(加法模型)+的前向分步演算法
    (指數損失達到最小時分類錯誤率也將最小化)
  • 預測模型是基學習器的加權平均值: H(x)=t=1Tαtht(x)H(x)=\sum_{t=1}^T\alpha_th_t(x)
  • 每一次迭代的弱學習器怎麼學?
    改變訓練資料的權值(概率分佈):提高被錯誤分類的樣本權值,降低正確的Dm=Dm11ememD_m=D_{m-1}\frac{1-e_m}{e_m}(eme_m被誤分類樣本的權值之和)
    選取讓誤差率最低的閾值來設計基本分類器
  • 弱分類器權值怎麼確定?
    加大分類誤差率小的弱分類器權值,減小大的 αm=12log1emem\alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m}(底數是e,eme,e_m為誤差率)
  • 優點:不會很容易出現過擬合現象

七、 GBDT vs. adaboost 區別

  • 名字不同是因為損失函式不同,也就是定位模型不足的方法不同
    GBDT是通過梯度定位的,而adaboost是通過提高被錯誤分類的樣本權值來定位的
  • AdaBoost對異常點(outlier)比較敏感,而GBDT通過引入bagging思想、加入正則項等方法能夠有效地抵禦訓練資料中的噪音,具有更好的健壯性。

八、xgboost

參考:推導

1、 (最小化)目標函式=損失函式(可自定義,只需滿足二次可微)+ 正則化項(與葉子節點的數量和值有關)

  • 目標函式:IjI_j為所有被劃分到葉子節點j的訓練樣本的集合
    obj(t)i=1n[giwq(xi)+12hiwq(xi)2]+γT+12λj=1Twj2obj^{(t)}\approx \sum_{i=1}^n[g_iw_{q(x_i)}+\frac{1}{2}h_iw_{q(x_i)}^2]+\gamma T+\frac{1}{2}\lambda\sum_{j=1}^Tw_j^2

=j=1T[(iIjgi)wj+12(iIjhi+λ)wj2]+γT=\sum_{j=1}^T[(\sum_{i\in I_j}g_i)w_j+\frac{1}{2}(\sum_{i\in I_j}h_i+\lambda)w_j^2]+\gamma T

=j=1T[Gjwj+12(Hj+λ)wj2]+γT=\sum_{j=1}^T[G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2]+\gamma T

  • 損失函式:除了一階導還用二階導,對每一次的損失函式做二階泰勒展開,展開之後刪去常數項,會發現目標函式與損失函式的形式無關,所以可以自定義,只需滿足二次可微
    gig_i是損失函式一階導,hih_i是二階,ft(xi)f_t(x_i)第t棵樹第i個葉子節點的值)
    i=1n[gift(xi)+12hift2(xi)]+Ω(ft)\sum_{i=1}^n[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\Omega(f_t)
  • 正則化作用:
    • 訓練資料可能有誤,未必涵蓋了所有種類的樣本
    • 控制模型複雜度,對引數施加一定的控制,防止引數走向極端,防止過擬合
    • γ\gamma:人為加入的閾值,使xgboost在優化目標函式的同時做了預剪枝
      λ\lambda:L2的係數,相當於對leaf score做了平滑,防止過擬合
      Ω(f)=γT+12λj=1Twj2\Omega(f)=\gamma T+\frac{1}{2}\lambda \sum_{j=1}^Tw_j^2

2、模型:一堆CART樹
yi^=k=1Kfk(xi),fkF\hat{y_i}=\sum_{k=1}^Kf_k(x_i),f_k\in \mathcal{F}

(為什麼用CART樹而不是普通的決策樹:CART樹的葉子節點對應的值是一個實際的分數,而非一個確定的類別,有利於實現高效的優化演算法)
3、如何找樹的結構:挨層判斷切分點。對每個確定切分點,衡量切分好壞的標準如下:
Gain=12[GL2HL+λ+GR2HR+λ(GL+GR)2HL+HR+λ]γGain=\frac{1}{2}[\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}]- \gamma