模型融合有許多方法,簡單的有平均融合,加權(quán)融合,投票融合等方法;較為復(fù)雜的就是Blending和Stacking了。后面兩種模型融合方法理解起來比較困難,本文才有圖解方式讓讀者可以更好的理解這兩種融合方法。為了方便起見,本文只介紹基礎(chǔ)的二層融合。由于網(wǎng)上很多的代碼使用的是較早的sklearn的版本,其中的StratifiedKFold 使用方法有所改變,因此本文在sklearn 0.20上重新實現(xiàn)了這兩種方法。 1. Blending1.1 Blending 流程Blending相較于Stacking來說要簡單一些,其流程大致分為以下幾步: 將數(shù)據(jù)劃分為訓(xùn)練集和測試集(test_set),其中訓(xùn)練集需要再次劃分為訓(xùn)練集(train_set)和驗證集(val_set); 創(chuàng)建第一層的多個模型,這些模型可以使同質(zhì)的也可以是異質(zhì)的; 使用train_set訓(xùn)練步驟2中的多個模型,然后用訓(xùn)練好的模型預(yù)測val_set和test_set得到val_predict, test_predict1; 創(chuàng)建第二層的模型,使用val_predict作為訓(xùn)練集訓(xùn)練第二層的模型; 使用第二層訓(xùn)練好的模型對第二層測試集test_predict1進行預(yù)測,該結(jié)果為整個測試集的結(jié)果
1.2 Blending 圖解
Blending代碼實現(xiàn) 2. Stacking2.1 Stacking 流程Stacking流程比較復(fù)雜因為涉及到交叉驗證的過程,其流程與Blending類似,具體如下: 將數(shù)據(jù)劃分為訓(xùn)練集和測試集(test_set),對訓(xùn)練集進行劃分為K個大小相似的集合,取其中一份作為驗證集val_set,其余的為訓(xùn)練集train_set; 創(chuàng)建第一層的多個模型,這些模型可以使同質(zhì)的也可以是異質(zhì)的; 對于每一個模型來說,train_set和val_set是不一樣的,如2.2圖所示;然后利用各自的train_set訓(xùn)練各自的模型,訓(xùn)練好的模型對各自的val_set和test_set進行預(yù)測,得到val_predict和test_predict; 創(chuàng)建第二層的模型,將每個模型對應(yīng)的val_predict拼接起來作為第二層的訓(xùn)練集,將所有模型的test_predict取平均值作為第二層的測試集;用訓(xùn)練好的第二層模型對第二層的測試集進行預(yù)測,得到的結(jié)果即為整個測試集的結(jié)果
2.2 Stacking 圖解
Stacking代碼實現(xiàn) 3. Blending與Stacking對比Blending的優(yōu)點在于: 1.比stacking簡單(因為不用進行k次的交叉驗證來獲得stacker feature) 2.避開了一個信息泄露問題:generlizers和stacker使用了不一樣的數(shù)據(jù)集 3.在團隊建模過程中,不需要給隊友分享自己的隨機種子 而缺點在于: 1.使用了很少的數(shù)據(jù)(是劃分hold-out作為測試集,并非cv) 2.blender可能會過擬合(其實大概率是第一點導(dǎo)致的) 3.stacking使用多次的CV會比較穩(wěn)健
|