一.Stacking思想簡介
Stacking的思想是一種有層次的融合模型,比如我們將用不同特征訓練出來的三個GBDT模型進行融合時,我們會將三個GBDT作為基層模型,在其上在訓練一個次學習器(通常為線性模型LR),用於組織利用基學習器的答案,也就是將基層模型的答案作為輸入,讓次學習器學習組織給基層模型的答案分配權重。
二.Stacking過程解讀
Stacking的主要思想是訓練模型來學習使用底層學習器的預測結果,下圖是一個5折stacking中基模型在所有數據集上生成預測結果的過程,次學習器會基於模型的預測結果進行再訓練,單個基模型生成預測結果的過程是:
*首先將所有數據集生成測試集和訓練集(假如訓練集為10000,測試集為2500行),那么上層會進行5折交叉檢驗,使用訓練集中的8000條作為喂養集,剩余2000行作為驗證集(橙色)
*每次驗證相當於使用了藍色的8000條數據訓練出一個模型,使用模型對驗證集進行驗證得到2000條數據,並對測試集進行預測,得到2500條數據,這樣經過5次交叉檢驗,可以得到中間的橙色的5*2000條驗證集的結果(相當於每條數據的預測結果),5*2500條測試集的預測結果。
*接下來會將驗證集的5*2000條預測結果拼接成10000行長的矩陣,標記為A1,而對於5*2500行的測試集的預測結果進行加權平均,得到一個2500一列的矩陣,標記為B1。
*上面得到一個基模型在數據集上的預測結果A1、B1,這樣當我們對3個基模型進行集成的話,相於得到了A1、A2、A3、B1、B2、B3六個矩陣
*之后我們會將A1、A2、A3並列在一起成10000行3列的矩陣作為training data,B1、B2、B3合並在一起成2500行3列的矩陣作為testing data,讓下層學習器基於這樣的數據進行再訓練。
*再訓練是基於每個基礎模型的預測結果作為特征(三個特征),次學習器會學習訓練如果往這樣的基學習的預測結果上賦予權重w,來使得最后的預測最為准確。
以上就是Stacking的思想,進行Stacking集成同樣需要基學習器盡量保持獨立,效果相近。
三.Stacking特點
使用stacking,組合1000多個模型,有時甚至要計算幾十個小時。但是,這些怪物般的集成方法同樣有着它的用處:
(1)它可以幫你打敗當前學術界性能最好的算法
(2)我們有可能將集成的知識遷移到到簡單的分類器上
(3)自動化的大型集成策略可以通過添加正則項有效的對抗過擬合,而且並不需要太多的調參和特征選擇。所以從原則上講,stacking非常適合於那些“懶人”
(4)這是目前提升機器學習效果最好的方法,或者說是最效率的方法human ensemble learning 。
四.Stacking和Blending對比
1.Blending方式和Stacking方式很類似,相比Stacking更簡單點,兩者區別是:
*blending是直接准備好一部分10%留出集只在留出集上繼續預測,用不相交的數據訓練不同的 Base Model,將它們的輸出取(加權)平均。實現簡單,但對訓練數據利用少了。
2.blending 的優點是:比stacking簡單,不會造成數據穿越(所謂數據創越,就比如訓練部分數據時候用了全局的統計特征,導致模型效果過分的好),generalizers和stackers使用不同的數據,可以隨時添加其他模型到blender中。
3.缺點在於:blending只使用了一部分數據集作為留出集進行驗證,而stacking使用多折交叉驗證,比使用單一留出集更加穩健
4.兩個方法都挺好,看偏好了,可以一部分做Blending、一部分做Stacking。