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