發布時間: 2019-10-28 16:03:35
集成學習是機器學習中一個非常重要且熱門的分支,是用多個弱分類器構成一個強分類器。集成學習通過建立幾個模型組合的來解決單一預測問題。它的工作原理是生成多個分類器/模型,各自獨立地學習和作出預測。這些預測最后結合成單預測,因此優于任何一個單分類的做出預測。一般的弱分類器可以由決策樹,神經網絡,貝葉斯分類器,K-近鄰等構成。已經有學者理論上證明了集成學習的思想是可以提高分類器的性能的,比如說統計上的原因,計算上的原因以及表示上的原因。
在集成學習理論中,我們將弱學習器(或基礎模型)稱為「模型」,這些模型可用作設計更復雜模型的構件。在大多數情況下,這些基本模型本身的性能并不是非常好,這要么是因為它們具有較高的偏置(例如,低自由度模型),要么是因為他們的方差太大導致魯棒性不強(例如,高自由度模型)。
集成方法的思想是通過將這些弱學習器的偏置和/或方差結合起來,從而創建一個「強學習器」(或「集成模型」),從而獲得更好的性能。
1)模型選擇 假設各弱分類器間具有一定差異性(如不同的算法,或相同算法不同參數配置),這會導致生成的分類決策邊界不同,也就是說它們在決策時會犯不同的錯誤。將它們結合后能得到更合理的邊界,減少整體錯誤,實現更好的分類效果。

2) 數據集過大或過小
數據集較大時,可以分為不同的子集,分別進行訓練,然后再合成分類器。 數據集過小時,可使用自舉技術(bootstrapping),從原樣本集有放回的抽取m個子集,訓練m個分類器,進行集成。
3)分治 若決策邊界過于復雜,則線性模型不能很好地描述真實情況。因此先訓練多個線性分類器,再將它們集成。
4)數據融合(Data Fusion) 當有多個不同數據源,且每個數據源的特征集抽取方法都不同時(異構的特征集),需要分別訓練分類器然后再集成
為了建立一個集成學習方法,我們首先要選擇待聚合的基礎模型。在大多數情況下(包括在眾所周知的 bagging 和 boosting 方法中),我們會使用單一的基礎學習算法,這樣一來我們就有了以不同方式訓練的同質弱學習器。這樣得到的集成模型被稱為「同質的」。然而,也有一些方法使用不同種類的基礎學習算法:將一些異質的弱學習器組合成「異質集成模型」。很重要的一點是:我們對弱學習器的選擇應該和我們聚合這些模型的方式相一致。如果我們選擇具有低偏置高方差的基礎模型,我們應該使用一種傾向于減小方差的聚合方法;而如果我們選擇具有低方差高偏置的基礎模型,我們應該使用一種傾向于減小偏置的聚合方法。這就引出了如何組合這些模型的問題。我們可以用三種主要的旨在組合弱學習器的「元算法」:
1)boosting的弱分類器形成是同一種機器學習算法,只是其數據抽取時的權值在不斷更新,每次都是提高前一次分錯了的數據集的權值,最后得到T個弱分類器,且分類器的權值也跟其中間結果的數據有關。
2)Bagging算法也是用的同一種弱分類器,其數據的來源是用bootstrap算法得到的(有放回抽樣,一個instance被前面分錯的越厲害,它的概率就被設的越高)。
3)Stacking算法分為兩個階段,首先我們使用多個基礎分類器來預測分類;然后,一個新的學習模塊與它們的預測結果結合起來,來降低泛化誤差。
1)每個弱分類器的錯誤率不能高于0.5
2)弱分類器之間的性能要有較大的差別,否則集成效果不是很好
Adaboost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)
Adaboost算法本身是通過改變數據權值分布來實現的,它根據每次訓練集中每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改過權值的新數據送給下層分類器進行訓練,最后將每次得到的分類器最后融合起來,作為最后的決策分類器.
關于弱分類器的組合,Adaboost算法采用加權多數表決的方法。具體來說,就是加大分類誤差率小的弱分類器的權值,使其在表決中起較大的作用,減小分類誤差率較大的弱分類器的權值,使其在表決中起較小的作用
輸入: 分類數據;弱算法數組 輸出: 分類結果
流程:
Step1 給訓練數據集中的每一個樣本賦予權重,權重初始化相等值,這些權重形成向量D。一般初始化所有訓練樣例的權重為1 / N,其中N是樣例數
Step2 在訓練集上訓練出弱分類器并計算該分類器的錯誤率
Step3 同一數據集上再次訓練分類器,調整樣本的權重,將第一次分對的樣本權重降低,第一次分錯的樣本權重提高
Step4 最后給每一個分類器分配一個權重值alpha,alpha = 0.5*ln((1-錯誤率)/錯誤率)
Step5 計算出alpha值后,可以對權重向量D進行更新,以使得正確分類的樣本權重降低而錯分樣本的權重升高。

計算出D之后,AdaBoost又開始進入下一輪迭代。Adaboost算法會不斷地重復訓練和調整權重的過程,知道訓練錯誤率為0或者弱分類器的數目達到用戶指定的值為止

“關注”被錯分的樣本,“器重”性能好的弱分類器;不同的訓練集,調整樣本權重“關注”,增加錯分樣本權重“器重”,好的分類器權重大樣本權重間接影響分類器權重
優點:
l Adaboost是一種有很高精度的分類器;
l 可以使用各種方法構建子分類器,Adaboost算法提供的是框架;
l 當使用簡單分類器時,計算出的結果是可以理解的,而弱分類器構造及其簡單;
l 簡單,不用做特征篩選;
l 不用擔心overfitting(過擬合)問題。
用于二分類或多分類的應用場景;用于做分類任務的baseline–無腦化,簡單,不會overfitting,不用調分類器;用于特征選擇(feature selection) ;Boosting框架用于對bad case的修正,只需要增加新的分類器,不需要變動原有分類器。

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一種迭代的決策樹算法,該算法由多棵決策樹組成,所有樹的結論累加起來做最終答案。
Regression Decision Tree(及DT 回歸決策樹)Gradient Boosting(即GB)Shrinkage(算法的一個重要演進分枝)
回歸樹總體流程也是類似,不過在每個節點(不一定是葉子節點)都會得一個預測值,以年齡為例,該預測值等于屬于這個節點的所有人年齡的平均值。分枝時窮舉每一個feature的每個閾值找最好的分割點,但衡量最好的標準不再是較大熵,而是最小化均方差–即(每個人的年齡-預測年齡)^2 的總和 / N,或者說是每個人的預測誤差平方和 除以 N。
Boosting,迭代,即通過迭代多棵樹來共同決策。GBDT的核心就在于,每一棵樹學的是之前所有樹結論和的殘差,這個殘差就是一個加預測值后能得真實值的累加量。比如A的真實年齡是18歲,但第一棵樹的預測年齡是12歲,差了6歲,即殘差為6歲。那么在第二棵樹里我們把A的年齡設為6歲去學習,如果第二棵樹真的能把A分到6歲的葉子節點,那累加兩棵樹的結論就是A的真實年齡;如果第二棵樹的結論是5歲,則A仍然存在1歲的殘差,第三棵樹里A的年齡就變成1歲,繼續學。這就是Gradient Boosting在GBDT中的意義。
更多的技術內容,請訪問騰科公司網站 m.didibird.cn
上一篇: 大數據培訓_PCA降維
下一篇: 人工智能AI培訓_機器學習之決策樹算法