集成學習算法(Ensemble Method)淺析
個性化推薦系統(tǒng)是達觀數(shù)據(jù)在金融、電商、媒體、直播等行業(yè)的主要產(chǎn)品之一。在達觀數(shù)據(jù)的個性化推薦系統(tǒng)架構中,可 以簡單地分為5層架構,每層處理相應的數(shù)據(jù)輸出給下一層使用,分別是:
- 數(shù)據(jù)處理層
作為推薦系統(tǒng)***端的數(shù)據(jù)處理層,主要功能是首先將客戶上傳上來的一些無用的噪聲數(shù)據(jù)進行清理過濾,將推薦系 統(tǒng)所需要用到的數(shù)據(jù)導入到數(shù)據(jù)存儲層中;
- 數(shù)據(jù)存儲層
對于item的數(shù)據(jù)一般存入在Mysql中,隨著數(shù)據(jù)量越來越大的item的數(shù)據(jù),相比Mysql的擴展性來說,HBase和Hive 是一個更好的選擇,Hive可以方便離線分析時操作。而對于實時模塊,以及一些用進程同步相關的模塊,實時性要求 比較高的,redis就可以派上用場了,作為緩存,生產(chǎn)者生產(chǎn)數(shù)據(jù)寫入redis供消費者讀?。?/p>
- 生成候選集
通過一系列的基礎算法如協(xié)同過濾,content-base,點擊反饋,熱門等數(shù)據(jù)給每個用戶生成個性化的候選集;
- 融合候選集
將各個算法生成的候選集的item按照一系列規(guī)則進行融合過濾。
- 重排序
將融合過濾后的item集合用一定的算法重新排序,將排序后的結果輸出到用戶,這邊主要常用到機器學習相關模型和 算法,如LR和GBDT。
本文將著重淺析一下重排序用到的集成學習算法(Ensemble Method)。
集成學習概述
集成學習算法本身不算一種單獨的機器學習算法,而是通過構建并結合多個機器學習器來完成學習任務??梢哉f是集百家 之所長,能在機器學習算法中擁有較高的準確率,不足之處就是模型的訓練過程可能比較復雜,效率不是很高。目前常見 的集成學習算法主要有2種:基于Bagging的算法和基于Boosting的算法,基于Bagging的代表算法有隨機森林,而基于Boosting的代表算法則有Adaboost、GBDT、XGBOOST等。
基于Bagging算法
Bagging算法(裝袋法)是bootstrap aggregating的縮寫,它主要對樣本訓練集合進行隨機化抽樣,通過反復的抽樣訓練新的模型,最終在這些模型的基礎上取平均。
- 基本思想
1.給定一個弱學習算法,和一個訓練集;
2.單個弱學習算法準確率不高;
3.將該學習算法使用多次,得出預測函數(shù)序列,進行投票;
4.***結果準確率將得到提高。
以隨機森林為例來詳解
- 隨機森林基本原理
隨機森林由LeoBreiman(2001)提出,從原始訓練樣本集N中有放回地重復隨機抽取k個樣本生成新的訓練樣本集 合,然后根據(jù)自助樣本集生成k個分類樹組成隨機森林,新數(shù)據(jù)的分類結果按分類樹投票多少形成的分數(shù)而定。其實質 是對決策樹算法的一種改進,將多個決策樹合并在一起,每棵樹的建立依賴于一個獨立抽取的樣品,森林中的每棵樹 具有相同的分布,分類誤差取決于每一棵樹的分類能力和它們之間的相關性。特征選擇采用隨機的方法去分裂每一個 節(jié)點,然后比較不同情況下產(chǎn)生的誤差。能夠檢測到的內在估計誤差、分類能力和相關性決定選擇特征的數(shù)目。單棵 樹的分類能力可能很小,但在隨機產(chǎn)生大量的決策樹后,一個測試樣品可以通過每一棵樹的分類結果經(jīng)統(tǒng)計后選擇最 可能的分類。
- 隨機森林算法過程
1.從訓練數(shù)據(jù)中選取n個數(shù)據(jù)作為訓練數(shù)據(jù)輸入,一般情況下n是遠小于整體的訓練數(shù)據(jù)N的,這樣就會造成有一部 分數(shù)據(jù)是無法被取到的,這部分數(shù)據(jù)稱為袋外數(shù)據(jù),可以使用袋外數(shù)據(jù)做誤差估計。
2.選取了輸入的訓練數(shù)據(jù)的之后,需要構建決策樹,具體方法是每一個分裂結點從整體的特征集M中選取m個特征構 建,一般情況下m遠小于M。
3.在構造每棵決策樹的過程中,按照選取最小的基尼指數(shù)進行分裂節(jié)點的選取進行決策樹的構建。決策樹的其他結點 都采取相同的分裂規(guī)則進行構建,直到該節(jié)點的所有訓練樣例都屬于同一類或者達到樹的***深度。
4.重復第2步和第3步多次,每一次輸入數(shù)據(jù)對應一顆決策樹,這樣就得到了隨機森林,可以用來對預測數(shù)據(jù)進行決 策。
5.輸入的訓練數(shù)據(jù)選擇好了,多棵決策樹也構建好了,對待預測數(shù)據(jù)進行預測,比如說輸入一個待預測數(shù)據(jù),然后多 棵決策樹同時進行決策,***采用多數(shù)投票的方式進行類別的決策。
- 隨機森林注意點
1.在構建決策樹的過程中是不需要剪枝的。
2.整個森林的樹的數(shù)量和每棵樹的特征需要人為進行設定。
3.構建決策樹的時候分裂節(jié)點的選擇是依據(jù)最小基尼系數(shù)的。
基于Boosting算法
提升算法(Boosting)是常用的有效的統(tǒng)計學習算法,屬于迭代算法,它通過不斷地使用一個弱學習器彌補前一個弱學習器 的“不足”的過程,來串行地構造一個較強的學習器,這個強學習器能夠使目標函數(shù)值足夠小。
- 基本思想
1.先賦予每個訓練樣本相同的概率;
2.然后進行T次迭代,每次迭代后,對分類錯誤的樣本加大權重(重采樣),使得在下一次的迭代中更加關注這些樣本。
Boosting系列算法里***算法主要有AdaBoost算法和提升樹(boosting tree)系列算法。提升樹系列算法里面應用最廣泛的是梯度提升樹(Gradient Boosting Tree)。
以AdaBoost算法作為代表算法來詳解
- 基本原理
Adaboost(adaptive boosting: boosting + 單層決策樹)是boosting中較為代表的算法,基本思想是通過訓練數(shù)據(jù)的分布構造一個分類器,然后通過誤差率求出這個若弱分類器的權重,通過更新訓練數(shù)據(jù)的分布,迭代進行,直到達到 迭代次數(shù)或者損失函數(shù)小于某一閾值。
假設訓練數(shù)據(jù)集為
- 算法過程
Bagging和Boosting算法異同
Bagging算法與Boosting算法的核心都是將一系列弱學習器的算法按照特定的結合策略組合成強學習器的過程。兩者之 間的區(qū)別在于以下幾點上:
1.樣本選擇:
- Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的.
- Boosting:每一輪的訓練集不變,只是訓練集中每個樣例在分類器中的權重發(fā)生變化.而權值是根據(jù)上一輪的分類結果 進行調整。
2.樣例權重:
- Bagging:使用均勻取樣,每個樣例的權重相等。
- Boosting:根據(jù)錯誤率不斷調整樣例的權值,錯誤率越大則權重越大.
3.預測函數(shù):
- Bagging:所有預測函數(shù)的權重相等。
- Boosting:每個弱分類器都有相應的權重,對于分類誤差小的分類器會有更大的權重。
4.并行計算:
- Bagging:各個預測函數(shù)可以并行生成。
- Boosting:各個預測函數(shù)只能順序生成,因為后一個模型參數(shù)需要前一輪模型的結果。
集成學習之結合策略
以上部分我們主要關注與學習器本身,對于學習器之間的結合策略并未涉及到,這一小節(jié)主要介紹常見的結合策略,主要 有平均法,投票法,學習法。
- 平均法
對于數(shù)值類的回歸預測問題,通常使用的結合策略是平均法,也就是說,對于若干和弱學習器的輸出進行平均得到最 終的預測輸出。最簡單的平均是算術平均,也就是說最終預測為
- 投票法
- 學習法
上兩節(jié)的方法都是對弱學習器的結果做平均或者投票,相對比較簡單,但是可能學習誤差較大,于是就有了學習法這種方 法,對于學習法,代表方法是stacking,當使用stacking的結合策略時,我們不是對弱學習器的結果做簡單的邏輯處理, 而是再加上一層學習器,也就是說,我們將訓練集弱學習器的學習結果作為輸入,將訓練集的輸出作為輸出,重新訓練一 個學習器來得到最終結果。
在這種情況下,我們將弱學習器稱為初級學習器,將用于結合的學習器稱為次級學習器。對于測試集,我們首先用初級學 習器預測一次,得到次級學習器的輸入樣本,再用次級學習器預測一次,得到最終的預測結果。
總結
Bagging和Boosting都是把若干個分類器整合為一個分類器的集成學習方法,只是整合的方式不一樣,最終得到不一樣 的效果。下面是將決策樹與這些算法框架進行結合所得到的新的算法:
1.Bagging + 決策樹 = 隨機森林
2.AdaBoost + 決策樹 = 提升樹
3.Gradient Boosting + 決策樹 = GBDT
其中GBDT在達觀數(shù)據(jù)個性化推薦重排序層得到很好地應用。
作者:陳祥龍
達觀數(shù)據(jù)數(shù)據(jù)挖掘工程師,畢業(yè)于復旦大學計算機科學與技術專業(yè),現(xiàn)主要負責大型私有化推薦項目部署工作。
【本文為51CTO專欄作者“達觀數(shù)據(jù)”的原創(chuàng)稿件,轉載可通過51CTO專欄獲取聯(lián)系】