集成學習

集成學習

集成學習就是構建多個學習器來完成學習任務,也稱爲多分類系統,也就是對多個學習器進行組合,獲得比單一學習器顯著優越的泛化性能。

  • 集成學習分類
  1. 各自之間存在強依賴關係,必須要串行生成的序列化方法

boosting 算法
讓真個數據集放在一個弱學習器中進行學習,每個樣本和弱分類器都有一個初始權重,之後根據訓練結果的好壞對權重進行調整,如此重複進行,知道弱學習器達到事先指定的數目T,最終將t個弱學習器通過集合策略進行整合。得到最終的強學習器

  1. 個體之間不存在強依賴關係,可同時生成的並行化方法

bagging 和隨機森林
由多個弱學習器集成起來的強學習器,但弱學習器之間沒有依賴關係,可以並行生成,簡單來說每個弱學習器學習數據的一部分特徵,然後測試的時候結合策略能夠得到一個數據整體特徵然後分類。
bagging是基於自助採樣法,給定包含m個樣本的數據集,先隨機選出一個樣本放入採樣集,再把樣本放入初始數據集,使得下次採樣的時候,該樣本仍可能被選中,這樣經過m次隨機採樣操作,得到m個樣本的採樣集,初始訓練集中有的樣本在採樣集裏多次出現,有的則從來都未出現,然後基於每個採樣集訓練處一個基學習器,在集成。

  • 集成學習的結合策略
    1. 平均法:當預測問題是連續數值的迴歸問題時調用
    2. 投票法:取單層分類器分類結果當衆數,一般還有閾值,也就是說衆數達到一定數量才能判斷爲正確。
    3. 學習法,從初始訓練集訓練處初級學習器,然後生成一個新數據集用於訓練次級學習器,在這個新數據集中,初級學習器的輸出被當做樣例輸入特徵,而初始樣本的標記仍被當做樣例標記,得到新學習器作爲集成學習
  • 隨機森林

方法:從樣本集(假設樣本集N個數據點)中重採樣選出n個樣本(有放回的採樣,樣本數據點個數仍然不變爲N,之所以要有放回就是怕過擬合),在所有樣本上,對這n個樣本建立分類器(ID3\C4.5\CART),重複以上兩步m次,獲得m個分類器,最後根據這m個分類器的結合策略,決定數據屬於哪一類。
優點:樣本的隨機(從樣本集中用Bootstrap隨機選取n個樣本)和特徵的隨機性(從所有屬性中隨機選取K個屬性,選擇最佳分割屬性作爲節點建立CART決策樹)由於特徵子集是隨機選擇的,所以它能夠處理很高維度(feature很多)的數據,並且不用做特徵選擇;訓練速度快,容易做成並行化方法;在訓練完後,它能夠給出哪些feature比較重要。
缺點:隨機森林已經被證明在某些噪音較大的分類或迴歸問題上會過擬合;對同一特徵去取值過多會降低效果;超參數的調節不便。
實現:這裏需要調節的超參數主要有:樹的棵樹、深度、最大分裂、葉子節點最少樣本數

  • AdaBoost

  1. 思路 解決兩個問題,第一就是在每輪訓練前如何選取改變訓練數據的權重和概率分佈,第二就是如何對弱分類器進行組合,第一個問題就是提高前一輪被訓練器錯誤分類樣本的權值,加大分類誤差率小的弱分類器權值
  2. 優點:泛化錯誤率低,易編碼,可用在大部分弱分類器上,無參數調整,缺點:對離羣點敏感。
  • GBDT

思路 與ADaboost不同的GBDT的弱分類器用的是CART分類歸回數模型,同時迭代的思路不同,GBDT是基於上一輪迭代的殘差進行訓練的,
損失函數爲:L(y,fm1(x))L(y,f_{m-1}(x)).此時y就是殘差,m輪迭代得到hm(x)h_{m}(x)所以損失函數爲L(y,fm1(x)+hm(x))L(y,f_{m-1}(x)+h_{m}(x)),殘差一般指的是fm(x)fm1(x)f_{m}(x)-f_{m-1}(x),但是考慮一個問題,這樣的殘差是否可以解決分類問題,答案是不可以的,所以,我們就會用損失函數的負梯度值取殘差,因爲我們想叫你得到的值加上原本覆蓋的值接近真實值,所以要有負梯度,這樣只要有損失函數就可求導得到殘差。L(y,fm(x))fm(x)\frac {\partial L(y,f_{m}(x))} {f_{m}(x)}
設每一輪產生的單個分類器爲,一共訓練M次,我們把模型描述M個弱分類器線性相加爲:
Fm=m=1MT(x,Θm)F_{m}=\sum_{m=1}^{M}T(x,\Theta_{m})
對於每一次訓練,模型爲

fm=fm1(x)+T(x,Θm)f_{m}=f_{m-1}(x)+T(x,\Theta_{m})

損失函數:
L(f(x),y)=L(y,fm1(x)+T(x,θm))L(f(x),y)=L(y,f_{m-1}(x)+T(x,\theta_{m}))

缺點
可以靈活的處理各種類型的數據,包括連續值和離散值
相比普通決策樹泛化能力更強,不宜與過擬合
缺點是不能達到並行訓練的高效率的優點
XGBoost
是GBDT的一個優化實現,總結一下她的優勢

  1. xgbboost 在目標函數中加入了正則化項
  2. L(Φ)=(y^y)+Ω(fk)L(\Phi)=\sum|(\widehat{y},y)+\sum\Omega(f_{k})
  3. Ω(fk)=rT+12w2\Omega(f_{k})=rT+\frac{1}{2}|w|^{2}
  4. GBDT 中生成Fm(x)F_{m}(x)用的是一節梯度的負方向來替代殘差的,而Xgboost用了二階泰勒展開。
  5. GBDT中尋找最佳分割點,(選取特徵)的衡量標準是最小均方誤差,考慮了傳統的枚舉每個特徵的所有可能分割點的貪心法效率太低,xgbboost實現了一種近似的算法,大致的思想根據百分位列舉幾個可能成爲分割點的候選者,然後根據候選者中根據上面求分割點的公式計算出最佳的分割點。
  6. 當訓練的數據爲稀疏的矩陣的時候,可以爲缺失值或者指定的值指定分支的默認方向,這能大大提高算法的效率
  7. 現在的XGBboost都被封裝成工具包,想調用可以用sklean。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章