1. 程式人生 > >機器學習 整合學習的結合策略之stacking學習法

機器學習 整合學習的結合策略之stacking學習法

模型融合的結合策略: 基本學習器學習完後,需要將各個模型進行融合,常見的策略有:

1,平均法: 平均法有一般的評價和加權平均,這個好理解。對於平均法來說一般用於迴歸預測模型中,在Boosting系列融合模型中,一般採用的是加權平均融合。

2,投票法:有絕對多數投票(得票超過一半),相對多數投票(得票最多),加權投票。這個也好理解,一般用於分類模型。在bagging模型中使用。

3,學習法:一種更為強大的結合策略是使用”學習法”,即通過另一個學習器來進行結合,把個體學習器稱為初級學習器,用於結合的學習器稱為次級學習器或元學習器。常見的有Stacking和Blending兩種 

Stacking方法:

 Stacking 先從初始資料集訓練出初級學習器,然後”生成”一個新資料集用於訓練次級學習器。在這個新資料集中,初級學習器的輸出被當作樣例輸入特徵,而初始樣本的標記仍被當作樣例標記。 
stacking一般使用交叉驗證的方式,初始訓練集D 被隨機劃分為k 個大小相似的集合D1 , D2 , … , Dk,每次用k-1個部分訓練T個模型,對另個一個部分產生T個預測值作為特徵,遍歷每一折後,也就得到了新的特徵集合,標記還是源資料的標記,用新的特徵集合訓練一個集合模型。

本文以Kaggle的Titanic(泰坦尼克預測)入門比賽來講解stacking的應用(兩層!一層是初級學習器,第二層是次級學習器(元學習器)的訓練

)。

資料的行數:train.csv有890行,也就是890個人,test.csv有418行(418個人)。

而資料的列數就看你保留了多少個feature了,因人而異。我自己的train保留了 7+1(1是預測列)。

在網上流傳比較多的圖為

1. 對訓練集(890條資料)做5折交叉驗證。每1次的fold,都會生成 713行 小train, 178行 小test。

  對於每一輪的 5-fold,Model 1都要做滿5次的訓練和預測。

我們用Model 1來訓練 713行的小train,然後預測 178行 小test。預測的結果是長度為 178 的預測值。

這樣的動作走5次!

長度為178 的預測值 X 5 = 890 預測值,剛好和Train data長度吻合。這個890預測值是Model 1產生的,我們先存著,因為,一會讓它將是第二層模型的訓練來源。

重點:這一步產生的預測值我們可以轉成 890 X 1 (890 行,1列),記作 P1 (大寫P)

接著說 Test Data 有 418 行。(請對應圖中的下層部分,對對對,綠綠的那些框框)

每1次的fold,713行 小train訓練出來的Model 1要去預測我們全部的Test Data(全部!因為Test Data沒有加入5-fold,所以每次都是全部!)。此時,Model 1的預測結果是長度為418的預測值。

這樣的動作走5次!我們可以得到一個 5 X 418 的預測值矩陣。然後我們根據行來就平均值,最後得到一個 1 X 418 的平均預測值。

重點:這一步產生的預測值我們可以轉成 418 X 1 (418行,1列),記作 p1 (小寫p)

走到這裡,你的第一層的Model 1完成了它的使命。

2。  第一層還會有其他Model的,比如Model 2,同樣的走一遍, 我們有可以得到 890 X 1 (P2) 和 418 X 1 (p2) 列預測值。

這樣吧,假設你第一層有3個模型,這樣你就會得到:

來自5-fold的預測值矩陣 890 X 3,(P1,P2, P3) 和 來自Test Data預測值矩陣 418 X 3, (p1, p2, p3)。

—————————————–

到第二層了………………

來自5-fold的預測值矩陣 890 X 3 作為你的Train Data,訓練第二層的模型

來自Test Data預測值矩陣 418 X 3 就是你的Test Data,用訓練好的模型來預測他們吧。