3
本文作者: 汪思穎 | 2017-09-29 19:22 |
雷鋒網(wǎng) AI科技評(píng)論按,本文作者吉他手,雷鋒網(wǎng) AI科技評(píng)論獲其授權(quán)發(fā)布。
此文道出了本人學(xué)習(xí)Stacking入門(mén)級(jí)應(yīng)用的心路歷程。
在學(xué)習(xí)過(guò)程中感謝@貝爾塔的模型融合方法,以及如何在 Kaggle 首戰(zhàn)中進(jìn)入前 10%這篇文章(作者是章凌豪)。對(duì)于兩位提供的信息,感激不盡。同時(shí)還有Kaggle上一些關(guān)于ensemble的文章和代碼,比如這篇(https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python)。
本文適用于被stacking折磨的死去活來(lái)的新手,在網(wǎng)上為數(shù)不多的stacking內(nèi)容里,我已經(jīng)假設(shè)你早已經(jīng)看過(guò)了上述所提到的那幾篇有用的文章了。但是,看完之后內(nèi)心還是臥槽的。我希望下面的內(nèi)容能成為,你在學(xué)習(xí)stacking的曲折道路上的一個(gè)小火把,給你提供一些微弱的光亮。
本文以Kaggle的Titanic(泰坦尼克預(yù)測(cè))入門(mén)比賽來(lái)講解stacking的應(yīng)用(兩層?。?。
數(shù)據(jù)的行數(shù):train.csv有890行,也就是890個(gè)人,test.csv有418行(418個(gè)人)。
而數(shù)據(jù)的列數(shù)就看你保留了多少個(gè)feature了,因人而異。我自己的train保留了 7+1(1是預(yù)測(cè)列)。
在網(wǎng)上為數(shù)不多的stacking內(nèi)容里,相信你早看過(guò)了這張圖:
這張圖,如果你能一下子就能看懂,那就OK。
如果一下子看不懂,就麻煩了,在接下來(lái)的一段時(shí)間內(nèi),你就會(huì)臥槽臥槽地持續(xù)懵逼......
因?yàn)檫@張圖極具‘誤導(dǎo)性’。(注意!我沒(méi)說(shuō)這圖是錯(cuò)的,盡管它就是錯(cuò)的?。?!但是在網(wǎng)上為數(shù)不多教學(xué)里有張無(wú)碼圖就不錯(cuò)啦,感恩吧,我這個(gè)小弱雞)。
我把圖改了一下:
對(duì)于每一輪的 5-fold,Model 1都要做滿(mǎn)5次的訓(xùn)練和預(yù)測(cè)。
Titanic 栗子:
Train Data有890行。(請(qǐng)對(duì)應(yīng)圖中的上層部分)
每1次的fold,都會(huì)生成 713行 小train, 178行 小test。我們用Model 1來(lái)訓(xùn)練 713行的小train,然后預(yù)測(cè) 178行 小test。預(yù)測(cè)的結(jié)果是長(zhǎng)度為 178 的預(yù)測(cè)值。
這樣的動(dòng)作走5次! 長(zhǎng)度為178 的預(yù)測(cè)值 X 5 = 890 預(yù)測(cè)值,剛好和Train data長(zhǎng)度吻合。這個(gè)890預(yù)測(cè)值是Model 1產(chǎn)生的,我們先存著,因?yàn)?,一?huì)讓它將是第二層模型的訓(xùn)練來(lái)源。
重點(diǎn):這一步產(chǎn)生的預(yù)測(cè)值我們可以轉(zhuǎn)成 890 X 1 (890 行,1列),記作 P1 (大寫(xiě)P)
接著說(shuō) Test Data 有 418 行。(請(qǐng)對(duì)應(yīng)圖中的下層部分,對(duì)對(duì)對(duì),綠綠的那些框框)
每1次的fold,713行 小train訓(xùn)練出來(lái)的Model 1要去預(yù)測(cè)我們?nèi)康腡est Data(全部!因?yàn)門(mén)est Data沒(méi)有加入5-fold,所以每次都是全部!)。此時(shí),Model 1的預(yù)測(cè)結(jié)果是長(zhǎng)度為418的預(yù)測(cè)值。
這樣的動(dòng)作走5次!我們可以得到一個(gè) 5 X 418 的預(yù)測(cè)值矩陣。然后我們根據(jù)行來(lái)就平均值,最后得到一個(gè) 1 X 418 的平均預(yù)測(cè)值。
重點(diǎn):這一步產(chǎn)生的預(yù)測(cè)值我們可以轉(zhuǎn)成 418 X 1 (418行,1列),記作 p1 (小寫(xiě)p)
走到這里,你的第一層的Model 1完成了它的使命。
第一層還會(huì)有其他Model的,比如Model 2,同樣的走一遍, 我們有可以得到 890 X 1 (P2) 和 418 X 1 (p2) 列預(yù)測(cè)值。
這樣吧,假設(shè)你第一層有3個(gè)模型,這樣你就會(huì)得到:
來(lái)自5-fold的預(yù)測(cè)值矩陣 890 X 3,(P1,P2, P3) 和 來(lái)自Test Data預(yù)測(cè)值矩陣 418 X 3, (p1, p2, p3)。
-----------------------------------------
到第二層了..................
來(lái)自5-fold的預(yù)測(cè)值矩陣 890 X 3 作為你的Train Data,訓(xùn)練第二層的模型
來(lái)自Test Data預(yù)測(cè)值矩陣 418 X 3 就是你的Test Data,用訓(xùn)練好的模型來(lái)預(yù)測(cè)他們吧。
---------------------------------------
最后 ,放出一張Python的Code,在網(wǎng)上為數(shù)不多的stacking內(nèi)容里, 這個(gè)幾行的code你也早就看過(guò)了吧,我之前一直卡在這里,現(xiàn)在加上一點(diǎn)點(diǎn)注解,希望對(duì)你有幫助:
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。