1. 程式人生 > 實用技巧 >《整合學習:XGBoost, lightGBM》[1]

《整合學習:XGBoost, lightGBM》[1]

《整合學習:XGBoost, lightGBM》[1]

視訊選集

5/19

https://www.bilibili.com/video/BV1Ca4y1t7DS?p=6

對新手不要太實用

差別不是很大

決策在kaggle上的利器(二)

雍瓏庚 自然語言處理愛好者

本文繼續接上一篇

05 整合學習簡介

整合學習是通過構建並組合多個學習器來完成學習任務的演算法整合學習常用的有兩類

Bagging:基學習器之間無強依賴關係,可同時生成的並行化方法

Boosting:基學習器之間存在強烈的依賴關係,必須序列生成基分類器的方法

Bagging (Bootstrap Aggregating)方法

let n be the number of boostrap samples

for i=1 to n do
 Draw boostrap samples of size m,D
 Train base classifier h on D

y = model(h_1(x),...h_n(x))

Boosting 方法是將“弱學習演算法”提升為“強學習演算法”的過程,通過反覆學習得到一系列弱分類器(決策樹和邏輯迴歸),組合這些弱分類器得到一個強分類器。Boosting 演算法要涉及到兩個部分,加法模型和前向分步演算法。

加法模型就是說強分類器由一系列弱分類器線性相加而成般組合形式如下

其中,l (x; am)是弱分類器,m 是弱分類器學習到的最優引數,m 是弱學習在強分類器中所佔比重,P 是所有 m 和βm 的組合。這些弱分類器線性相加組成強分類器

前向分步是在訓練過程中,下一輪迭代產生的分類器是在上輪的基礎上訓練得來的。即

06Bagging:隨機森林

隨機森林= bagging+決策樹

同時訓練多個決策樹,預測時綜合考慮多個結果進行預測,例如取多個節點的均值(迴歸),或者是眾數(分類)。

  • 消除了決策樹容易過擬合的缺點
  • 減小了預測的方差,預測值不會因訓練資料的小變化而劇烈變化

隨機性體現在兩點

從原來的訓練資料集隨機(帶放回 bootstrap)取一個子集作為森林中某一個決策樹的訓練資料集

每一次選擇分又的特徵時,限定為在隨機選擇的特徵的子集中尋找一個特徵。

隨機森林實踐

現有某公司的員工離職資料,我們通過構建決策樹和隨機森林來預測某一員工是否會離職。並找出影響員工離職的重要特徵

07Boosting:Adaboost

Adaboostt 的理解

Adaboostl 的思想是將關注點放在被錯誤分類的樣本上,減小上一輪被正確分類的樣本權值提高被錯誤分類的樣本權值

Adaboost 採用加權投票的方法分類誤差小的弱分類器的權重大,而分類誤差大的弱分類器的權重小。

Adaboostt 的演算法流程

假設輸入訓練資料為

其中, 迭代次數即弱分類器個數為 M

  1. 初始化訓練樣本的權值分佈為

  1. 對於

a)使用具有權值分佈的訓練資料集進行學習,得到弱分類器

b) 計算在訓練資料集上的分類誤差率

c) 計算在強分類器中所佔的權重

(d)更新訓練資料集的權值分佈(這裡,是歸一化因子,為了使樣本的概率分佈和為 1)

  1. 得到最終的分類器為

Adaboost 的證明

假設經過 m-1 輪迭代,得到弱分類器 Fm-l (x),根據前向分佈,有:

AdaBoosth 的損失函式是指數損失,則有

因為是已知的,所以將其移到前面

其中:是每輪迭代的樣本權重,證明化簡如下:

繼續化簡loss

重寫Loss:

對求偏導,並令其為0,則有:

Adaboostt 的實踐

Adaboosti 可以看作是加法模型、損失函式為指數損失函式、學習演算法為前向分佈演算法時的二分類學習方法。接下來我們使用 s learnt 中 Ada Boost 的介面進行實踐:

sklearn-AdaBoostClassifier

class sklearn.ensemble.AdaBoostClassifier(base_estimator=None, *, n_estimators=50, learning_rate=1.0, algorithm='SAMME.R', random_state=None)[source]

這裡是本人打比賽開始接觸的bagging和boosting的整合學習方法,作為一個深度學習工程師,第一次感受到機器學習演算法在各大比賽上的優勢。

讓我們一起分享,共同成長,分享使我們在程式設計路上並不孤獨。快來掃描微信二維碼,與博主一起快樂學習吧!

編輯於 06-29


https://github.com/Yara-S/PyDS-Basics/blob/master/DecisionTree-RandomForest.ipynb

https://github.com/TuringEmmy/Bible/blob/dev/DecisionTree/DecisionTree.RandomForest.ipynb

筆記見:

https://zhuanlan.zhihu.com/p/151866177