机器学习模型融合
模型融合方式:
· 均值法Averaging:適用于回歸類(lèi)算法,將每個(gè)評(píng)估器的輸出做平均,類(lèi)似于Bagging中回歸的做法。
· 投票法Voting: 適用于分類(lèi)算法,將每個(gè)評(píng)估器的輸出進(jìn)行投票, 類(lèi)似于Bagging中分類(lèi)的做法
· 堆疊法Stacking: 使用一個(gè)/多個(gè)算法在訓(xùn)練集上輸出的某種結(jié)果作為下一個(gè)算法的訓(xùn)練數(shù)據(jù)。
· 改進(jìn)堆疊法Blending: 一種特殊的stacking, 使用一個(gè)/多個(gè)算法在驗(yàn)證集上輸出的某種結(jié)果作為下一個(gè)算法的訓(xùn)練數(shù)據(jù)。
一 投票法Voting:
1 五大類(lèi)投票方法
(1)相對(duì)多數(shù)投票
只要有一個(gè)類(lèi)別占比較多即可
(2)絕對(duì)多數(shù)投票
要求至少有50%或者以上的分類(lèi)器都輸出了同一類(lèi)別,否則拒絕預(yù)測(cè)。
(3)硬投票
將不同類(lèi)別的出現(xiàn)次數(shù)進(jìn)行計(jì)數(shù),出現(xiàn)次數(shù)最多的類(lèi)別就是投票結(jié)果。
(4)軟投票
將不同類(lèi)別下的概率進(jìn)行加和,概率最高的類(lèi)別就是投票結(jié)果。基于概率的軟投票可以衡量投票的置信程度, 某一類(lèi)別下的概率越高, 說(shuō)明該模型對(duì)該類(lèi)別的預(yù)測(cè)結(jié)果越有信心。
(5)加權(quán)投票
加權(quán)投票是在投票過(guò)程中賦予不同分類(lèi)器權(quán)重的投票,具體表現(xiàn)在:
· 對(duì)于硬投票,加權(quán)投票可以改變每一個(gè)分類(lèi)器所擁有的票數(shù)。
· 對(duì)于軟投票,加權(quán)投票可以改變每一個(gè)分類(lèi)器所占的權(quán)重,令概率的普通加和變成加權(quán)求和。
2 模型融合流程(分類(lèi)問(wèn)題)
(1)建立基于交叉驗(yàn)證的benchmark、做模型選擇
在模型融合前,需將可能有用的算法簡(jiǎn)單運(yùn)行一次,從中調(diào)選出表現(xiàn)較好的算法作為融合的基礎(chǔ)。找到單一算法可以實(shí)現(xiàn)的最好分?jǐn)?shù)來(lái)作為benchmark,然后將融合后的模型與benchmark進(jìn)行比較。
(2)構(gòu)建多組分類(lèi)器, 進(jìn)行融合
進(jìn)行投票或者平均融合后,結(jié)果反而沒(méi)有單個(gè)算法好,可能是以下原因:
1. 評(píng)估器之間的學(xué)習(xí)能力/模型表現(xiàn)差異太大。 在融合中,一個(gè)表現(xiàn)很差的模型會(huì)拉低整個(gè)融合模型的上限,尤其是回歸類(lèi)算法,所以應(yīng)當(dāng)剔除差得模型。
2. 評(píng)估器在類(lèi)型上過(guò)于相似。比如都是樹(shù)模型、都是Boosting算法,如果平均/投票的評(píng)估器都一致,那融合模型最終得出的結(jié)果也會(huì)與單個(gè)評(píng)估器一致。
3. 對(duì)評(píng)估器進(jìn)行了過(guò)于精密的調(diào)優(yōu)。經(jīng)過(guò)粗略調(diào)優(yōu)的評(píng)估器融合能夠提升模型表現(xiàn), 但如果對(duì)評(píng)估器進(jìn)行過(guò)于精密的調(diào)優(yōu), 可能會(huì)讓融合后的算法處于嚴(yán)重過(guò)擬合的狀態(tài)。
3 構(gòu)建多樣性
在模型融合中,獨(dú)立性被稱(chēng)為多樣性,評(píng)估器之間的差別越大、彼此之間就越獨(dú)立,因此評(píng)估器越多樣,獨(dú)立性就越強(qiáng)。
以下方法,用來(lái)讓評(píng)估器變得更多樣,讓評(píng)估器之間相互獨(dú)立:
· 訓(xùn)練數(shù)據(jù)多樣性: 完成多組有效的特征工程,使用不同的特征矩陣訓(xùn)練不同的模型。但如何找出多組有效的特征工程是難題。
· 樣本多樣性: 使用相同的特征矩陣, 但每次訓(xùn)練時(shí)抽樣出不同的樣本子集進(jìn)行訓(xùn)練。
· 特征多樣性: 使用相同特征矩陣, 但每次訓(xùn)練時(shí)抽樣出不同的特征子集進(jìn)行訓(xùn)練。
· 隨機(jī)多樣性/訓(xùn)練多樣性: 使用相同的算法,但使用不同的隨機(jī)數(shù)種子(會(huì)導(dǎo)致使用不同的特征、樣本、起點(diǎn))、或使用不同的損失函數(shù)、使用不同的不純度下降量等。
· 算法多樣性: 增加類(lèi)型不同的算法,如集成、樹(shù)、概率、線(xiàn)性模型相混合。
二 堆疊法Stacking
1 Stacking基本思想
Stacking集模型效果好、可解釋性強(qiáng)、適用復(fù)雜數(shù)據(jù)
Stacking由兩層組成,分別為level 0和level 1,level 0中包含一個(gè)或多個(gè)強(qiáng)學(xué)習(xí)器,而level 1只能包含一個(gè)學(xué)習(xí)器。在訓(xùn)練過(guò)程中,level 0先進(jìn)行訓(xùn)練,level 0中的每個(gè)算法會(huì)輸出相應(yīng)的預(yù)測(cè)結(jié)果(驗(yàn)證集),將這些預(yù)測(cè)結(jié)果拼湊成新特征矩陣,再輸入level 1的算法進(jìn)行訓(xùn)練。融合模型最終輸出的預(yù)測(cè)結(jié)果就是level 1的學(xué)習(xí)器輸出的結(jié)果。
?在訓(xùn)練過(guò)程中,level 0輸出的預(yù)測(cè)結(jié)果一般如下排布:
?注意:
level 0上的學(xué)習(xí)器是復(fù)雜度高、學(xué)習(xí)能力強(qiáng)的學(xué)習(xí)器,如繼承算法。而level 1上的學(xué)習(xí)器是可解釋性強(qiáng)、較為簡(jiǎn)單的學(xué)習(xí)器,如決策樹(shù)、線(xiàn)性回歸、邏輯回歸等。
有這樣的要求是因?yàn)閘evel 0上的算法目的是找出原始數(shù)據(jù)與標(biāo)簽的關(guān)系、建立原始數(shù)據(jù)與標(biāo)簽之間的假設(shè),因此需要強(qiáng)大的學(xué)習(xí)能力。level 1上的算法的職責(zé)是融合個(gè)體學(xué)習(xí)器做出的假設(shè)、并且最終輸出融合模型的結(jié)果,相當(dāng)于在尋找“最佳融合規(guī)則”。
2 Stacking細(xì)節(jié)問(wèn)題
(1)要不要對(duì)融合的算法進(jìn)行精密的調(diào)參?
個(gè)體學(xué)習(xí)器粗調(diào),元學(xué)習(xí)器精調(diào),如果不過(guò)擬合的話(huà),可以?xún)深?lèi)學(xué)習(xí)器都精調(diào)
(2)個(gè)體學(xué)習(xí)器算法要怎么樣選擇才能最大化stacking的效果?
控制過(guò)擬合、增加多樣性、注意算法整體的運(yùn)算時(shí)間。
(3)個(gè)體學(xué)習(xí)器可以是復(fù)雜度較低的算法嗎?元學(xué)習(xí)器可以是Xgboost這種復(fù)雜度很高的算法嗎?
都可以,以模型效果為準(zhǔn)。
(4)level 0和level 1的算法可不可以使用不同的損失函數(shù)?
可以,不同的損失函數(shù)衡量的是類(lèi)似的差異,不過(guò)不同的損失對(duì)于差異的敏感性不同,盡量使用相似的損失函數(shù)。
(5)level 0和level 1的算法可不可以使用不同的評(píng)估指標(biāo)?
必須使用相同的模型評(píng)估指標(biāo)
3 Stacking中的交叉驗(yàn)證
(1)元學(xué)習(xí)器的特征矩陣的兩個(gè)問(wèn)題:
· 元學(xué)習(xí)器的特征矩陣中的特征一定很少
特征矩陣中的特征數(shù)就等于個(gè)體學(xué)習(xí)器的個(gè)數(shù)
·元學(xué)習(xí)器的特征矩陣中樣本量也不太多
因?yàn)樵獙W(xué)習(xí)器的特征矩陣為level 0在驗(yàn)證集上的輸出結(jié)果,驗(yàn)證集的樣本量有限
因此可使用交叉驗(yàn)證來(lái)造特征矩陣
對(duì)任意個(gè)體學(xué)習(xí)器來(lái)說(shuō),假設(shè)執(zhí)行5折交叉驗(yàn)證,會(huì)將訓(xùn)練數(shù)據(jù)分成5份,并按照4份訓(xùn)練、1份驗(yàn)證的方式總共建立5個(gè)模型,訓(xùn)練5次,注意每個(gè)學(xué)習(xí)器都要執(zhí)行一次5折交叉驗(yàn)證,注意是一個(gè)學(xué)習(xí)器分別執(zhí)行這5次驗(yàn)證,并不是正常的迭代訓(xùn)練執(zhí)行,因此不會(huì)泄露數(shù)據(jù)。
某個(gè) 個(gè)體學(xué)習(xí)器的訓(xùn)練過(guò)程如下圖所示:
?個(gè)體學(xué)習(xí)器最終輸出的列為上圖中的5個(gè)預(yù)測(cè)結(jié)果拼接:
?最終,任意個(gè)體學(xué)習(xí)器的輸出的預(yù)測(cè)值數(shù)量 = 樣本量
數(shù)據(jù)量夠大,使用過(guò)多的交叉驗(yàn)證折數(shù)并不會(huì)帶來(lái)好處,更可能讓訓(xùn)練時(shí)間降低。
4 Stratified K折交叉驗(yàn)證
Stratified K折驗(yàn)證會(huì)考慮標(biāo)簽中每個(gè)類(lèi)別占比的交叉驗(yàn)證,每次訓(xùn)練時(shí)交叉驗(yàn)證會(huì)保證
原始標(biāo)簽中的類(lèi)別比例 = 訓(xùn)練標(biāo)簽的類(lèi)別比例 = 驗(yàn)證標(biāo)簽的類(lèi)別比例。
5 特征太少的解決方案
?sklearn中StackingClassifier的參數(shù)stack_method(這個(gè)參數(shù)只用于分類(lèi)問(wèn)題,因?yàn)榛貧w問(wèn)題輸出的只能是標(biāo)簽):
正常情況下,一個(gè)個(gè)體學(xué)習(xí)器只能輸出一列的預(yù)測(cè)結(jié)果,但如果把輸出的結(jié)果類(lèi)型更換為概率值、置信度等內(nèi)容,輸出結(jié)果的結(jié)構(gòu)就可以從一列擴(kuò)展為多列。
這個(gè)操作由參數(shù)stack_method控制,stack_method里面可以輸入四種字符串:
"auto","predict_proba","decision_function","predict"
· predict_proba?是輸出概率值
????????對(duì)n分類(lèi),輸出樣本的真實(shí)標(biāo)簽為[0,1,2,3...n]的概率,一共n列
· decision_function?是每個(gè)樣本點(diǎn)到分類(lèi)超平面的距離,可以衡量置信度
????????對(duì)n分類(lèi),輸出樣本的真實(shí)標(biāo)簽為[0,1,2,3...n]的置信度,一共n列
· predict?輸出具體的預(yù)測(cè)標(biāo)簽
? ? ? ? 對(duì)任何分類(lèi)形式,輸出算法在樣本上的預(yù)測(cè)標(biāo)簽,一列
6 Stacking融合的訓(xùn)練/測(cè)試流程
*測(cè)試流程:
(1)細(xì)節(jié)問(wèn)題:
· 最終輸出預(yù)測(cè)結(jié)果的是元學(xué)習(xí)器,直覺(jué)上來(lái)說(shuō)測(cè)試數(shù)據(jù)集或許應(yīng)該被輸入到元學(xué)習(xí)器當(dāng)中。然而,元學(xué)習(xí)器是使用新特征矩陣進(jìn)行預(yù)測(cè)的,新特征矩陣的結(jié)構(gòu)與規(guī)律都與原始數(shù)據(jù)不同。所以元學(xué)習(xí)器不可能接受從原始數(shù)據(jù)中分割出來(lái)的測(cè)試數(shù)據(jù),正確的做法應(yīng)該是讓測(cè)試集輸入level 0的個(gè)體學(xué)習(xí)器。
· level 0 的個(gè)體學(xué)習(xí)器們?cè)谟?xùn)練過(guò)程中做的是交叉驗(yàn)證,而交叉驗(yàn)證只會(huì)輸出驗(yàn)證結(jié)果,不會(huì)留下被訓(xùn)練的模型。因此在level 0中沒(méi)有可以用于預(yù)測(cè)的、已經(jīng)訓(xùn)練完畢的模型。
解決方法:
訓(xùn)練時(shí),在交叉驗(yàn)證完成后,使用全部訓(xùn)練數(shù)據(jù)對(duì)所有個(gè)體學(xué)習(xí)器進(jìn)行訓(xùn)練,為測(cè)試做好準(zhǔn)備
stacking的測(cè)試:
1.將測(cè)試集輸入level 0的個(gè)體學(xué)習(xí)器,分別在每個(gè)個(gè)體學(xué)習(xí)器上預(yù)測(cè)出相應(yīng)結(jié)果,拼接起來(lái)作為標(biāo)簽。
2.將新特征矩陣放入元學(xué)習(xí)器進(jìn)行預(yù)測(cè)。
因此在stacking中,不僅要對(duì)個(gè)體學(xué)習(xí)器完成全部交叉驗(yàn)證,還需要在交叉驗(yàn)證結(jié)束后,重新使用全部訓(xùn)練數(shù)據(jù)來(lái)訓(xùn)練所有的模型。
需要注意:想要對(duì)原生代碼下的模型進(jìn)行融合,必須自己手寫(xiě)融合過(guò)程。
三 改進(jìn)后的堆疊法: Blending
Blending在訓(xùn)練過(guò)程中,level 0輸出的是驗(yàn)證集的結(jié)果,并沒(méi)有做K折交叉驗(yàn)證,即level 1的特征矩陣就是驗(yàn)證集對(duì)應(yīng)的大小,學(xué)習(xí)的東西少一些,模型抗過(guò)擬合能力越強(qiáng)。(數(shù)據(jù)量龐大的情況下可用)
數(shù)據(jù)量很小的情況下,stacking和blending都無(wú)法有效使用,實(shí)際中,stacking的應(yīng)用比blending廣泛。
總結(jié)
- 上一篇: P2607 [ZJOI2008]骑士
- 下一篇: 入行时间序列预测必读的4篇论文(附代码)