全部課程
發(fā)布時(shí)間: 2019-10-28 16:03:35
集成學(xué)習(xí)是機(jī)器學(xué)習(xí)中一個(gè)非常重要且熱門(mén)的分支,是用多個(gè)弱分類器構(gòu)成一個(gè)強(qiáng)分類器。集成學(xué)習(xí)通過(guò)建立幾個(gè)模型組合的來(lái)解決單一預(yù)測(cè)問(wèn)題。它的工作原理是生成多個(gè)分類器/模型,各自獨(dú)立地學(xué)習(xí)和作出預(yù)測(cè)。這些預(yù)測(cè)最后結(jié)合成單預(yù)測(cè),因此優(yōu)于任何一個(gè)單分類的做出預(yù)測(cè)。一般的弱分類器可以由決策樹(shù),神經(jīng)網(wǎng)絡(luò),貝葉斯分類器,K-近鄰等構(gòu)成。已經(jīng)有學(xué)者理論上證明了集成學(xué)習(xí)的思想是可以提高分類器的性能的,比如說(shuō)統(tǒng)計(jì)上的原因,計(jì)算上的原因以及表示上的原因。
在集成學(xué)習(xí)理論中,我們將弱學(xué)習(xí)器(或基礎(chǔ)模型)稱為「模型」,這些模型可用作設(shè)計(jì)更復(fù)雜模型的構(gòu)件。在大多數(shù)情況下,這些基本模型本身的性能并不是非常好,這要么是因?yàn)樗鼈兙哂休^高的偏置(例如,低自由度模型),要么是因?yàn)樗麄兊姆讲钐髮?dǎo)致魯棒性不強(qiáng)(例如,高自由度模型)。
集成方法的思想是通過(guò)將這些弱學(xué)習(xí)器的偏置和/或方差結(jié)合起來(lái),從而創(chuàng)建一個(gè)「強(qiáng)學(xué)習(xí)器」(或「集成模型」),從而獲得更好的性能。
1)模型選擇 假設(shè)各弱分類器間具有一定差異性(如不同的算法,或相同算法不同參數(shù)配置),這會(huì)導(dǎo)致生成的分類決策邊界不同,也就是說(shuō)它們?cè)跊Q策時(shí)會(huì)犯不同的錯(cuò)誤。將它們結(jié)合后能得到更合理的邊界,減少整體錯(cuò)誤,實(shí)現(xiàn)更好的分類效果。
2) 數(shù)據(jù)集過(guò)大或過(guò)小
數(shù)據(jù)集較大時(shí),可以分為不同的子集,分別進(jìn)行訓(xùn)練,然后再合成分類器。 數(shù)據(jù)集過(guò)小時(shí),可使用自舉技術(shù)(bootstrapping),從原樣本集有放回的抽取m個(gè)子集,訓(xùn)練m個(gè)分類器,進(jìn)行集成。
3)分治 若決策邊界過(guò)于復(fù)雜,則線性模型不能很好地描述真實(shí)情況。因此先訓(xùn)練多個(gè)線性分類器,再將它們集成。
4)數(shù)據(jù)融合(Data Fusion) 當(dāng)有多個(gè)不同數(shù)據(jù)源,且每個(gè)數(shù)據(jù)源的特征集抽取方法都不同時(shí)(異構(gòu)的特征集),需要分別訓(xùn)練分類器然后再集成
為了建立一個(gè)集成學(xué)習(xí)方法,我們首先要選擇待聚合的基礎(chǔ)模型。在大多數(shù)情況下(包括在眾所周知的 bagging 和 boosting 方法中),我們會(huì)使用單一的基礎(chǔ)學(xué)習(xí)算法,這樣一來(lái)我們就有了以不同方式訓(xùn)練的同質(zhì)弱學(xué)習(xí)器。這樣得到的集成模型被稱為「同質(zhì)的」。然而,也有一些方法使用不同種類的基礎(chǔ)學(xué)習(xí)算法:將一些異質(zhì)的弱學(xué)習(xí)器組合成「異質(zhì)集成模型」。很重要的一點(diǎn)是:我們對(duì)弱學(xué)習(xí)器的選擇應(yīng)該和我們聚合這些模型的方式相一致。如果我們選擇具有低偏置高方差的基礎(chǔ)模型,我們應(yīng)該使用一種傾向于減小方差的聚合方法;而如果我們選擇具有低方差高偏置的基礎(chǔ)模型,我們應(yīng)該使用一種傾向于減小偏置的聚合方法。這就引出了如何組合這些模型的問(wèn)題。我們可以用三種主要的旨在組合弱學(xué)習(xí)器的「元算法」:
1)boosting的弱分類器形成是同一種機(jī)器學(xué)習(xí)算法,只是其數(shù)據(jù)抽取時(shí)的權(quán)值在不斷更新,每次都是提高前一次分錯(cuò)了的數(shù)據(jù)集的權(quán)值,最后得到T個(gè)弱分類器,且分類器的權(quán)值也跟其中間結(jié)果的數(shù)據(jù)有關(guān)。
2)Bagging算法也是用的同一種弱分類器,其數(shù)據(jù)的來(lái)源是用bootstrap算法得到的(有放回抽樣,一個(gè)instance被前面分錯(cuò)的越厲害,它的概率就被設(shè)的越高)。
3)Stacking算法分為兩個(gè)階段,首先我們使用多個(gè)基礎(chǔ)分類器來(lái)預(yù)測(cè)分類;然后,一個(gè)新的學(xué)習(xí)模塊與它們的預(yù)測(cè)結(jié)果結(jié)合起來(lái),來(lái)降低泛化誤差。
1)每個(gè)弱分類器的錯(cuò)誤率不能高于0.5
2)弱分類器之間的性能要有較大的差別,否則集成效果不是很好
Adaboost是一種迭代算法,其核心思想是針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的分類器(弱分類器),然后把這些弱分類器集合起來(lái),構(gòu)成一個(gè)更強(qiáng)的最終分類器(強(qiáng)分類器)
Adaboost算法本身是通過(guò)改變數(shù)據(jù)權(quán)值分布來(lái)實(shí)現(xiàn)的,它根據(jù)每次訓(xùn)練集中每個(gè)樣本的分類是否正確,以及上次的總體分類的準(zhǔn)確率,來(lái)確定每個(gè)樣本的權(quán)值。將修改過(guò)權(quán)值的新數(shù)據(jù)送給下層分類器進(jìn)行訓(xùn)練,最后將每次得到的分類器最后融合起來(lái),作為最后的決策分類器.
關(guān)于弱分類器的組合,Adaboost算法采用加權(quán)多數(shù)表決的方法。具體來(lái)說(shuō),就是加大分類誤差率小的弱分類器的權(quán)值,使其在表決中起較大的作用,減小分類誤差率較大的弱分類器的權(quán)值,使其在表決中起較小的作用
輸入: 分類數(shù)據(jù);弱算法數(shù)組 輸出: 分類結(jié)果
流程:
Step1 給訓(xùn)練數(shù)據(jù)集中的每一個(gè)樣本賦予權(quán)重,權(quán)重初始化相等值,這些權(quán)重形成向量D。一般初始化所有訓(xùn)練樣例的權(quán)重為1 / N,其中N是樣例數(shù)
Step2 在訓(xùn)練集上訓(xùn)練出弱分類器并計(jì)算該分類器的錯(cuò)誤率
Step3 同一數(shù)據(jù)集上再次訓(xùn)練分類器,調(diào)整樣本的權(quán)重,將第一次分對(duì)的樣本權(quán)重降低,第一次分錯(cuò)的樣本權(quán)重提高
Step4 最后給每一個(gè)分類器分配一個(gè)權(quán)重值alpha,alpha = 0.5*ln((1-錯(cuò)誤率)/錯(cuò)誤率)
Step5 計(jì)算出alpha值后,可以對(duì)權(quán)重向量D進(jìn)行更新,以使得正確分類的樣本權(quán)重降低而錯(cuò)分樣本的權(quán)重升高。
計(jì)算出D之后,AdaBoost又開(kāi)始進(jìn)入下一輪迭代。Adaboost算法會(huì)不斷地重復(fù)訓(xùn)練和調(diào)整權(quán)重的過(guò)程,知道訓(xùn)練錯(cuò)誤率為0或者弱分類器的數(shù)目達(dá)到用戶指定的值為止
“關(guān)注”被錯(cuò)分的樣本,“器重”性能好的弱分類器;不同的訓(xùn)練集,調(diào)整樣本權(quán)重“關(guān)注”,增加錯(cuò)分樣本權(quán)重“器重”,好的分類器權(quán)重大樣本權(quán)重間接影響分類器權(quán)重
優(yōu)點(diǎn):
l Adaboost是一種有很高精度的分類器;
l 可以使用各種方法構(gòu)建子分類器,Adaboost算法提供的是框架;
l 當(dāng)使用簡(jiǎn)單分類器時(shí),計(jì)算出的結(jié)果是可以理解的,而弱分類器構(gòu)造及其簡(jiǎn)單;
l 簡(jiǎn)單,不用做特征篩選;
l 不用擔(dān)心overfitting(過(guò)擬合)問(wèn)題。
用于二分類或多分類的應(yīng)用場(chǎng)景;用于做分類任務(wù)的baseline–無(wú)腦化,簡(jiǎn)單,不會(huì)overfitting,不用調(diào)分類器;用于特征選擇(feature selection) ;Boosting框架用于對(duì)bad case的修正,只需要增加新的分類器,不需要變動(dòng)原有分類器。
GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一種迭代的決策樹(shù)算法,該算法由多棵決策樹(shù)組成,所有樹(shù)的結(jié)論累加起來(lái)做最終答案。
Regression Decision Tree(及DT 回歸決策樹(shù))Gradient Boosting(即GB)Shrinkage(算法的一個(gè)重要演進(jìn)分枝)
回歸樹(shù)總體流程也是類似,不過(guò)在每個(gè)節(jié)點(diǎn)(不一定是葉子節(jié)點(diǎn))都會(huì)得一個(gè)預(yù)測(cè)值,以年齡為例,該預(yù)測(cè)值等于屬于這個(gè)節(jié)點(diǎn)的所有人年齡的平均值。分枝時(shí)窮舉每一個(gè)feature的每個(gè)閾值找最好的分割點(diǎn),但衡量最好的標(biāo)準(zhǔn)不再是較大熵,而是最小化均方差–即(每個(gè)人的年齡-預(yù)測(cè)年齡)^2 的總和 / N,或者說(shuō)是每個(gè)人的預(yù)測(cè)誤差平方和 除以 N。
Boosting,迭代,即通過(guò)迭代多棵樹(shù)來(lái)共同決策。GBDT的核心就在于,每一棵樹(shù)學(xué)的是之前所有樹(shù)結(jié)論和的殘差,這個(gè)殘差就是一個(gè)加預(yù)測(cè)值后能得真實(shí)值的累加量。比如A的真實(shí)年齡是18歲,但第一棵樹(shù)的預(yù)測(cè)年齡是12歲,差了6歲,即殘差為6歲。那么在第二棵樹(shù)里我們把A的年齡設(shè)為6歲去學(xué)習(xí),如果第二棵樹(shù)真的能把A分到6歲的葉子節(jié)點(diǎn),那累加兩棵樹(shù)的結(jié)論就是A的真實(shí)年齡;如果第二棵樹(shù)的結(jié)論是5歲,則A仍然存在1歲的殘差,第三棵樹(shù)里A的年齡就變成1歲,繼續(xù)學(xué)。這就是Gradient Boosting在GBDT中的意義。
更多的技術(shù)內(nèi)容,請(qǐng)?jiān)L問(wèn)騰科公司網(wǎng)站 pesce.cn