模型融合

1.Voting

? ? ? ? 投票法針對分類模型,多個模型的分類結(jié)果進(jìn)行投票,少數(shù)服從多數(shù)。除了公平投票外,還可以給投票設(shè)置權(quán)重,分類器效果越好權(quán)重越高,分類器效果越差,權(quán)重越低。

2.Averaging

回歸問題:直接取平均值作為最終的預(yù)測值,也可以使用加權(quán)平均。

分類問題:直接將模型的預(yù)測概率做平均,也可以使用加權(quán)平均。

可以把所有模型預(yù)測的結(jié)果作為新的特征,再通過線性回歸計(jì)算出權(quán)重

3.Ranking

Ranking融合適合排序評估指標(biāo),對auc比較有效。具體公式如下:


? ? ? ? 其中,n表示模型個數(shù),表示該樣本在第i個模型的權(quán)重,所有權(quán)重相同表示平均融合,表示該樣本在第i個模型中的升序排名。

4.Bagging

? ? ? ? 采用有放回的方式抽取訓(xùn)練子集來訓(xùn)練每個基模型,最后所有基模型進(jìn)行融合,分類問題進(jìn)行投票,回歸問題進(jìn)行平均。除了構(gòu)建不同的訓(xùn)練子集,也可以構(gòu)建不同的特征和參數(shù)保證基模型的差異性,最后再進(jìn)行融合。參考隨機(jī)森林。

5.Boosting

? ? ? ??Boosting算法是一種迭代算法。每輪迭代中會在訓(xùn)練集上產(chǎn)生一個新的分類器,然后使用該分類器對所有樣本進(jìn)行分類,以評估每個樣本的重要性。具體來說,算法會為每個訓(xùn)練樣本賦予一個權(quán)值。每次用訓(xùn)練完的新分類器標(biāo)注各個樣本,若某個樣本點(diǎn)已被分類正確,則將其權(quán)值降低,并以該權(quán)重進(jìn)行下一次數(shù)據(jù)的抽樣(抽中的概率減?。蝗魳颖军c(diǎn)未被正確分類,則提高其權(quán)值,并以該權(quán)重進(jìn)行下一次數(shù)據(jù)的抽樣(抽中的概率增大)。權(quán)值越高的樣本在下一次訓(xùn)練中所占的比重越大,也就是說越難區(qū)分的樣本在訓(xùn)練過程中會變得越來越重要。 整個迭代過程直到錯誤率足夠小或達(dá)到一定次數(shù)才停止。?參考adaboost,gbdt,xgboost。

? ? ? (1)Bagging + 決策樹 = 隨機(jī)森林

? ? ? (2)AdaBoost + 決策樹 = 提升樹

? ? ? (3)Gradient Boosting + 決策樹 = GBDT

Bagging和Boosting算法的區(qū)別:?

? ? ??(1)bagging的訓(xùn)練集是隨機(jī)的,各訓(xùn)練集是獨(dú)立的;而boosting訓(xùn)練集的選擇不是獨(dú)立的,每一次選擇的訓(xùn)練集都依賴于上一次學(xué)習(xí)的結(jié)果。

? ?(2)bagging的每個預(yù)測函數(shù)都沒有權(quán)重;而boosting根據(jù)每一次訓(xùn)練的訓(xùn)練誤差得到該次預(yù)測函數(shù)的權(quán)重。

?? ? ?(3)bagging的各個預(yù)測函數(shù)可以并行生成;而boosting只能順序生成。

bagging、boosting的對比: Bagging主要在優(yōu)化variance(即模型的魯棒性),boosting主要在優(yōu)化bias(即模型的精確性)

bagging: Bagging 是 Bootstrap Aggregating 的簡稱,意思就是再取樣 (Bootstrap) 然后在每個樣本上訓(xùn)練出來的模型取平均,所以是降低模型的 variance。

由于,所以bagging后的bias和單個子模型的接近,一般來說不能顯著降低bias。另一方面,若各子模型獨(dú)立,則有,此時可以顯著降低variance。

Boosting: boosting從優(yōu)化角度來看,是用forward-stagewise這種貪心法去最小化損失函數(shù)(指數(shù)函數(shù)),boosting是在sequential地最小化損失函數(shù),其bias自然逐步下降。但由于是采取這種sequential、adaptive的策略,各子模型之間是強(qiáng)相關(guān)的,于是子模型之和并不能顯著降低variance。所以說boosting主要還是靠降低bias來提升預(yù)測精度。

具體關(guān)于優(yōu)化角度的認(rèn)識查看:為什么說bagging是減少variance,而boosting是減少bias? - 知乎

如何理解bagging是減少variance,而boosting是減少bias?

6.Stacking

本文以Kaggle的Titanic(泰坦尼克預(yù)測)入門比賽來講解stacking的應(yīng)用(兩層!)。

數(shù)據(jù)的行數(shù):train.csv有890行,也就是890個人,test.csv有418行(418個人)。

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

在網(wǎng)上為數(shù)不多的stacking內(nèi)容里,相信你早看過了這張圖:

這張圖,如果你能一下子就能看懂,那就OK。

如果一下子看不懂,就麻煩了,在接下來的一段時間內(nèi),你就會臥槽臥槽地持續(xù)懵逼......

因?yàn)檫@張圖極具‘誤導(dǎo)性’。(注意!我沒說這圖是錯的,盡管它就是錯的!??!但是在網(wǎng)上為數(shù)不多教學(xué)里有張無碼圖就不錯啦,感恩吧,我這個小弱雞)。

我把圖改了一下:

對于每一輪的 5-fold,Model 1都要做滿5次的訓(xùn)練和預(yù)測。

Titanic 栗子:

Train Data有890行。(請對應(yīng)圖中的上層部分)

每1次的fold,都會生成 713行 小train, 178行 小test。我們用Model 1來訓(xùn)練 713行的小train,然后預(yù)測 178行 小test。預(yù)測的結(jié)果是長度為 178 的預(yù)測值。

這樣的動作走5次! 長度為178 的預(yù)測值 X 5 = 890 預(yù)測值,剛好和Train data長度吻合。這個890預(yù)測值是Model 1產(chǎn)生的,我們先存著,因?yàn)?,一會讓它將是第二層模型的?xùn)練來源。

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

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

每1次的fold,713行 小train訓(xùn)練出來的Model 1要去預(yù)測我們?nèi)康腡est Data(全部!因?yàn)門est Data沒有加入5-fold,所以每次都是全部!)。此時,Model 1的預(yù)測結(jié)果是長度為418的預(yù)測值。

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

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

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

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

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

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

-----------------------------------------

到第二層了..................

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

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

---------------------------------------

最后 ,放出一張Python的Code,在網(wǎng)上為數(shù)不多的stacking內(nèi)容里, 這個幾行的code你也早就看過了吧,我之前一直卡在這里,現(xiàn)在加上一點(diǎn)點(diǎn)注解,希望對你有幫助:

Blending方法: Blending與Stacking大致相同,只是Blending的主要區(qū)別在于訓(xùn)練集不是通過K-Fold的CV策略來獲得預(yù)測值從而生成第二階段模型的特征,而是建立一個Holdout集,例如說10%的訓(xùn)練數(shù)據(jù),第二階段的stacker模型就基于第一階段模型對這10%訓(xùn)練數(shù)據(jù)的預(yù)測值進(jìn)行擬合。說白了,就是把Stacking流程中的K-Fold CV 改成 HoldOut CV。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容