stacking模型融合_【干货】比赛后期大招之stacking技术分享
各位同學(xué)大家好,我是本次參賽選手李博,比賽ID是深藍(lán)(DeePBluE)。現(xiàn)在就讀于北京郵電大學(xué),是一名研一的在校生,研究方向是數(shù)據(jù)分析和機(jī)器學(xué)習(xí)。
是的,我又來分(na)享(li)東(wu)西了!這次給大家分享的是stacking的一些基本知識(shí),希望對(duì)大家有幫助。
現(xiàn)在比賽進(jìn)入了白熱化階段,并且馬上要切換決賽B榜了,很多隊(duì)伍都開始想著融合模型進(jìn)行提高,大家討論最多的一個(gè)就是stacking框架,但是在群里看到好多好多同學(xué)還沒有搞明白stacking框架到底是什么結(jié)構(gòu)?要怎么運(yùn)行?有什么注意點(diǎn)?有沒有變種?等等一些列問題。在哆啦的提醒下,今天寫這篇文章就按我自己的理解普及下stacking的一些知識(shí)(如果有不對(duì)的地方歡迎大家指正~~)。
一、前言
首先,在我看來stacking嚴(yán)格來說不能稱為一種算法,我理解的是一種非常精美而復(fù)雜的對(duì)模型的集成策略。大家都知道,在給定了數(shù)據(jù)集的情況下,數(shù)據(jù)內(nèi)部的空間結(jié)構(gòu)和數(shù)據(jù)之間的關(guān)系是非常復(fù)雜的。而不同的模型,其實(shí)很重要的一點(diǎn)就是在不同的角度去觀測我們的數(shù)據(jù)集。我舉個(gè)例子,KNN可能更加關(guān)注樣本點(diǎn)之間的距離關(guān)系(包括歐幾里得距離(Euclidean Distance)、明可夫斯基距離(Minkowski Distance等等),當(dāng)樣本距離相對(duì)較近,KNN就把他們分為一類;而決策樹,可能更加關(guān)注分裂節(jié)點(diǎn)時(shí)候的不純度變化,有點(diǎn)像我們自己找的規(guī)則,在滿足某個(gè)條件且滿足某個(gè)條件的情況下,決策樹把樣本分為一類等等。也就是說,不同的算法模型,其實(shí)是在不同的數(shù)據(jù)空間角度和數(shù)據(jù)結(jié)構(gòu)角度來觀測數(shù)據(jù),然后再依據(jù)它自己的觀測,結(jié)合自己的算法原理,來建立一個(gè)模型,在新的數(shù)據(jù)集上再進(jìn)行預(yù)測。這樣大家就會(huì)有個(gè)疑問了,俗話說:三人行必有我?guī)煛<热皇遣煌乃惴▽?duì)數(shù)據(jù)有不同的觀測,那么我們能不能相互取長補(bǔ)短,我看看你的觀測角度,你看看我的觀測角度,咱倆結(jié)合一下,是不是可以得到一個(gè)更加全面更加優(yōu)秀的結(jié)果呢?答案是肯定的。在我當(dāng)初學(xué)基礎(chǔ)算法的時(shí)候就有這么一個(gè)疑問,但是不知道怎么結(jié)合,直到有一天看到了stacking的框架,瞬間感覺找到了一片新天地~~~~下面我從以下幾個(gè)方面介紹stacking。
二、stacking的框架結(jié)構(gòu)與運(yùn)行過程
剛開始看stacking好像是交叉檢驗(yàn)的既視感,其實(shí)并不是這樣。假設(shè)是五折的stacking,我們有一個(gè)train數(shù)據(jù)集和一個(gè)test數(shù)據(jù)集,那么一個(gè)基本的stacking框架會(huì)進(jìn)行如下幾個(gè)操作:
1、選擇基模型。我們可以有xgboost,lightGBM,RandomForest,SVM,ANN,KNN,LR等等你能想到的各種基本算法模型。
2、把訓(xùn)練集分為不交叉的五份。我們標(biāo)記為train1到train5。
3、從train1開始作為預(yù)測集,使用train2到train5建模,然后預(yù)測train1,并保留結(jié)果;
然后,以train2作為預(yù)測集,使用train1,train3到train5建模,預(yù)測train2,并保留結(jié)果;如此進(jìn)行下去,直到把train1到train5各預(yù)測一遍;
4、把預(yù)測的結(jié)果按照train1到trian5的位置對(duì)應(yīng)填補(bǔ)上,得到對(duì)train整個(gè)數(shù)據(jù)集在第一個(gè)基模型的一個(gè)stacking轉(zhuǎn)換。
5、在上述建立的五個(gè)模型過程中,每個(gè)模型分別對(duì)test數(shù)據(jù)集進(jìn)行預(yù)測,并最終保留這五列結(jié)果,然后對(duì)這五列取平均,作為第一個(gè)基模型對(duì)test數(shù)據(jù)的一個(gè)stacking轉(zhuǎn)換。
6、選擇第二個(gè)基模型,重復(fù)以上2-5操作,再次得到train整個(gè)數(shù)據(jù)集在第二個(gè)基模型的一個(gè)stacking轉(zhuǎn)換。
7、以此類推。有幾個(gè)基模型,就會(huì)對(duì)整個(gè)train數(shù)據(jù)集生成幾列新的特征表達(dá)。同樣,也會(huì)對(duì)test有幾列新的特征表達(dá)。8、一般使用LR作為第二層的模型進(jìn)行建模預(yù)測。
大家看到這里可能有些不清楚,下面我畫個(gè)圖直觀解釋一下:
上面這個(gè)框架說明的是:對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行無重復(fù)的五次劃分之后,分別對(duì)其中每一部分進(jìn)行一次預(yù)測,而預(yù)測的模型就是由其余四部分訓(xùn)練的;并且在預(yù)測了預(yù)測集之后,還需要對(duì)我們的test數(shù)據(jù)集也進(jìn)行一次預(yù)測,這這樣就會(huì)得到5個(gè)N/5行、1列的對(duì)train數(shù)據(jù)集的特征轉(zhuǎn)換,和5個(gè)M行、1列的對(duì)test數(shù)據(jù)集的特征轉(zhuǎn)換,由此進(jìn)入下一個(gè)圖。
圖2 stacking的框架及預(yù)測圖這個(gè)圖說明的是對(duì)五部分的train分別預(yù)測之后再組成對(duì)train的新的表達(dá),由5個(gè)5/N行一列的預(yù)測組成一個(gè)N行1列預(yù)測結(jié)果,從而得到對(duì)train的新表達(dá);同時(shí),對(duì)test的結(jié)果也進(jìn)行處理,由于是5個(gè)模型對(duì)test的預(yù)測,所以要取平均,使得五列平均為一列,從而得到對(duì)test的新表達(dá)。
至此,整個(gè)stacking的框架和運(yùn)作流程介紹完畢,希望大家通過上面這一部分,能對(duì)stacking的整個(gè)框架和運(yùn)作流程有個(gè)比較清晰的認(rèn)識(shí)。
三、使用stacking的一些注意事項(xiàng)
經(jīng)過上一部分的介紹,想必大家感覺到stacking的威力可能很大,事實(shí)上也是這樣的。但是仍然有一些需要注意的地方,簡單介紹幾點(diǎn):
1、stacking的框架設(shè)計(jì)比較復(fù)雜,對(duì)于一個(gè)基模型要訓(xùn)練5次,如果你的一個(gè)xgb模型要訓(xùn)練2個(gè)小時(shí),即使在進(jìn)行stacking的時(shí)候每折減少了五分之一的數(shù)據(jù)量,你的計(jì)算時(shí)間仍然是很可觀的,加起來應(yīng)該還是8-9小時(shí),所以耗費(fèi)時(shí)間很長(想像一下一個(gè)stacking框架跑一個(gè)基模型要大半天,簡直太可怕)。所以建議大家在使用的時(shí)候要計(jì)算時(shí)間的耗費(fèi),或者可以改為3折,4折等等;
2、我們前面講過了,stacking框架是集成了不同的算法,充分利用不同算法從不同的數(shù)據(jù)空間角度和數(shù)據(jù)結(jié)構(gòu)角度的對(duì)數(shù)據(jù)的不同觀測,來取長補(bǔ)短,優(yōu)化結(jié)果。所以,我們的基模型除了是不同參數(shù)的相同模型之外,比如不同參數(shù)的xgboost,或者不同K值的KNN等等;更重要的是要盡可能的多加一些不同種類的基模型進(jìn)去,也就是說所謂的模型要“跨越空間”的概念。這樣的話我們的集成結(jié)果會(huì)更加穩(wěn)健,更加精確。(我曾經(jīng)見過一個(gè)比賽集成了上百個(gè)基模型的stacking框架獲獎(jiǎng),當(dāng)然用在我們這次比賽中好像不大合適O(∩_∩)O哈哈~)
四、stacking的一些基本變種改進(jìn)
在變種改進(jìn)方面,我們可以不僅對(duì)模型進(jìn)行融合,還可以對(duì)特征級(jí)進(jìn)行一些變化,比如選部分特征做stacking;或者對(duì)stacking的結(jié)果進(jìn)行再次的stacking,我們上面介紹的是兩層的stacking,可以有3層,或者更多。但是時(shí)間復(fù)雜度很高,效果并不一定明顯。好了,不知不覺洋洋灑灑寫了兩千多個(gè)字(自己畫的兩個(gè)圖有點(diǎn)丑不要介意),希望這篇文章能對(duì)大家理解stacking和應(yīng)用stacking有所幫助,并且實(shí)實(shí)在在的提高比賽得分~
總結(jié)
以上是生活随笔為你收集整理的stacking模型融合_【干货】比赛后期大招之stacking技术分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 那些大学简称背后的“爱恨情仇”:东西南北
- 下一篇: 多位院士、院士候选人入选,132人拟获表