概述
目的:讓機器學習效果更好,單個不行,集成多個
集成算法
Bagging:訓練多個分類器取平均
f ( x ) = 1 / M ∑ m = 1 M f m ( x ) f(x)=1/M\sum^M_{m=1}{f_m(x)} f(x)=1/M∑m=1M?fm?(x)
Boosting:從弱學習器開始加強,通過加權來進行訓練
F m ( x ) = F m ? 1 ( x ) + a r g m i n h ∑ i = 1 n L ( y i , F m ? 1 ( x i ) + h ( x i ) ) F_m(x)=F_{m-1}(x)+argmin_h\sum^n_{i=1}L(y_i,F_{m-1}(x_i)+h(x_i)) Fm?(x)=Fm?1?(x)+argminh?∑i=1n?L(yi?,Fm?1?(xi?)+h(xi?))
(加入一棵樹,新的樹更關注之前錯誤的例子)
Stacking:聚合多個分類或回歸模型(可以分階段來做)
Bagging模型(隨機森林)
全稱: bootstrap aggregation(說白了就是并行訓練一堆分類器)
最典型的代表就是隨機森林,現在Bagging模型基本上也是隨機森林。
隨機:數據采樣隨機,每棵樹只用部分數據;數據有多個特征(屬性)組成,每棵樹隨機選擇部分特征。隨機是為了使得每個分類器擁有明顯差異性。
森林:很多個決策樹并行放在一起
如何對所有樹選擇最終結果?分類的話可以采取少數服從多數,回歸的話可以采用取平均值。
構造樹模型
由于二重隨機性,使得每個樹基本上都不會一樣,最終的結果也會不一樣。
樹模型:
隨機性
之所以要進行隨機,是要保證泛化能力,如果樹都一樣,那就沒意義了!
如下圖所示,當每個弱分類器分類錯誤的樣本各不相同時,則能得到一個效果優異的集成模型。
隨機森林優勢
它能夠處理很高維度的數據,即數據擁有很多特征(屬性),并且不用做特征選擇(集成算法自動選擇了重要的特征)。
在訓練完后,它能夠給出哪些feature比較重要。
可以進行可視化展示,便于分析。
容易做成并行化方法,速度比較快。
解答:為什么隨機森林能夠給出哪些feature比較重要。
假如有四個分類器 A , B , C , D A,B,C,D A,B,C,D,他們對應關注(隨機選擇到)的屬性為 a , b , c , d a,b,c,d a,b,c,d
取 A , B , C , D A,B,C,D A,B,C,D的結果并且按少服從多數(也可以去平均等決策策略)得到錯誤了 e r r o r 1 error_1 error1?
之后我們給 B B B制作假數據,把之前真的數據結果打亂或者換成不合理的值,得到 B ′ B' B′,之后
取 A , B ′ , C , D A,B',C,D A,B′,C,D的結果并且按少服從多數(也可以去平均等決策策略)得到錯誤了 e r r o r 2 error_2 error2?
如果 e r r o r 2 ≈ e r r o r 1 error_2\approx error_1 error2?≈error1?,則說明屬性 B B B并不重要。
如果 e r r o r 2 ? e r r o r 1 error_2 \gg error_1 error2??error1?,則說明屬性 B B B非常重要,對結果造成了巨大影響。
關于樹的個數
理論上越多的樹效果會越好,但實際上基本超過一定數量就差不多上下浮動了。
Boosting模型(提升算法模型)
概述:
F m ( x ) = F m ? 1 ( x ) + a r g m i n h ∑ i = 1 n L ( y i , F m ? 1 ( x i ) + h ( x i ) ) F_m(x)=F_{m-1}(x)+argmin_h\sum^n_{i=1}L(y_i,F_{m-1}(x_i)+h(x_i)) Fm?(x)=Fm?1?(x)+argminh?∑i=1n?L(yi?,Fm?1?(xi?)+h(xi?))
假如有三個分類器 A , B , C A,B,C A,B,C,這個時候正如公式所示, A , B , C A,B,C A,B,C有種串聯的感覺。
假如有1000條數據, A A A僅分類正確900條,之后 B B B就關注錯誤的100條數據,僅那100條作為數據預測(這個做法有點極端,也可以拿小部分900條里面的數據),之后 B B B正確預測出50條,那么 C C C就那拿剩下的50條錯誤的數據用來給 C C C預測。
典型代表: AdaBoost, Xgboost
AdaBoost模型
Adaboost會根據前一次的分類效果調整數據權重,如果某一個數據在這次分錯了,那么在下一次我就會給它更大的權重。
最終的結果:每個分類器根據自身的準確性來確定各自的權重,再合并結果。
Adaboost工作流程
每一次切一刀,最終合在一起,弱分類器效果就更好了
Stacking模型
堆疊:很暴力,拿來一堆分類器直接上
可以堆疊各種各樣的分類器( KNN,SVM,RF等等)
為了刷結果,不擇手段!
分階段:第一階段得出各自結果,第二階段再用前一階段結果訓練
堆疊在一起確實能使得準確率提升,但是速度是個問題。