1. 程式人生 > >資料探勘競賽利器-Stacking和Blending方式

資料探勘競賽利器-Stacking和Blending方式

一.Stacking思想簡介

1.Stacking的思想是一種有層次的融合模型,比如我們將用不同特徵訓練出來的三個GBDT模型進行融合時,我們會將三個GBDT作為基層模型,在其上在訓練一個次學習器(通常為線性模型LR),用於組織利用基學習器的答案,也就是將基層模型的答案作為輸入,讓次學習器學習組織給基層模型的答案分配權重。

2.下圖是個簡單的例子,A、B是學習器,C、D、E是進行答案再組織的次學習器,次學習器會組織利用底層模型提供的答案。

二.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。