【零基础入门数据挖掘】-模型融合
?Datawhale?
作者:田楊軍?,Datawhale優秀學習者
摘要:對于數據挖掘項目,本文將學習如何進行模型融合?常見的模型融合的方法有哪些?針對不同的問題類型,應該選擇哪種方法呢?
模型融合:通過融合多個不同的模型,可能提升機器學習的性能。這一方法在各種機器學習比賽中廣泛應用, 也是在比賽的攻堅時刻沖刺Top的關鍵。而融合模型往往又可以從模型結果,模型自身,樣本集等不同的角度進行融合。
數據及背景
https://tianchi.aliyun.com/competition/entrance/231784/information(阿里天池-零基礎入門數據挖掘)
模型融合
如果你打算買一輛車,你會直接走進第一家4S店,然后在店員的推銷下直接把車買了嗎?大概率不會,你會先去網站,看看其他人的評價或者一些專業機構在各個維度上對各種車型的對比;也許還會取咨詢朋友和同事的意見。最后,做出決策。
模型融合采用的是同樣的思想,即多個模型的組合可以改善整體的表現。集成模型是一種能在各種的機器學習任務上提高準確率的強有力技術。
模型融合是比賽后期一個重要的環節,大體來說有如下的類型方式:
1. 簡單加權融合:
回歸(分類概率):算術平均融合(Arithmetic mean),幾何平均融合(Geometric mean);
分類:投票(Voting);
綜合:排序融合(Rank averaging),log融合。
2. stacking/blending:
構建多層模型,并利用預測結果再擬合預測。
3. boosting/bagging:
多樹的提升方法,在xgboost,Adaboost,GBDT中已經用到。
平均法(Averaging)
基本思想:對于回歸問題,一個簡單直接的思路是取平均。稍稍改進的方法是進行加權平均。權值可以用排序的方法確定,舉個例子,比如A、B、C三種基本模型,模型效果進行排名,假設排名分別是1,2,3,那么給這三個模型賦予的權值分別是3/6、2/6、1/6。
平均法或加權平均法看似簡單,其實后面的高級算法也可以說是基于此而產生的,Bagging或者Boosting都是一種把許多弱分類器這樣融合成強分類器的思想。
簡單算術平均法:Averaging方法就多個模型預測的結果進行平均。這種方法既可以用于回歸問題,也可以用于對分類問題的概率進行平均。
加權算術平均法:這種方法是平均法的擴展。考慮不同模型的能力不同,對最終結果的貢獻也有差異,需要用權重來表征不同模型的重要性importance。
其中,且
投票法(voting)
基本思想:假設對于一個二分類問題,有3個基礎模型,現在我們可以在這些基學習器的基礎上得到一個投票的分類器,把票數最多的類作為我們要預測的類別。
絕對多數投票法:最終結果必須在投票中占一半以上。
相對多數投票法:最終結果在投票中票數最多。
加權投票法:其原理為
其中,且
硬投票:對多個模型直接進行投票,不區分模型結果的相對重要度,最終投票數最多的類為最終被預測的類。
軟投票:增加了設置權重的功能,可以為不同模型設置不同權重,進而區別模型不同的重要度。
from sklearn.tree import DecisionTreeClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.ensemble import VotingClassifiermodel1 = LogisticRegression(random_state=2020) model2 = DecisionTreeClassifier(random_state=2020) model = VotingClassifier(estimators=[('lr', model1), ('dt', model2)], voting='hard') model.fit(x_train, y_train) model.score(x_test,?y_test)堆疊法(Stacking)
基本思想
stacking 就是當用初始訓練數據學習出若干個基學習器后,將這幾個學習器的預測結果作為新的訓練集,來學習一個新的學習器。對不同模型預測的結果再進行建模。
將個體學習器結合在一起的時候使用的方法叫做結合策略。對于分類問題,我們可以使用投票法來選擇輸出最多的類。對于回歸問題,我們可以將分類器輸出的結果求平均值。
上面說的投票法和平均法都是很有效的結合策略,還有一種結合策略是使用另外一個機器學習算法來將個體機器學習器的結果結合在一起,這個方法就是Stacking。
在stacking方法中,我們把個體學習器叫做初級學習器,用于結合的學習器叫做次級學習器或元學習器(metalearner),次級學習器用于訓練的數據叫做次級訓練集。次級訓練集是在訓練集上用初級學習器得到的。
如何進行Stacking
Stacking算法:
過程1-3 是訓練出來個體學習器,也就是初級學習器。
過程5-9是 使用訓練出來的個體學習器來得預測的結果,這個預測的結果當做次級學習器的訓練集。
過程11 是用初級學習器預測的結果訓練出次級學習器,得到我們最后訓練的模型。
Stacking方法詳解
Stacking模型本質上是一種分層的結構,這里簡單起見,只分析二級Stacking.假設我們有2個基模型 Model1_1、Model1_2 和 一個次級模型Model2。
Step 1. 基模型 Model1_1,對訓練集train訓練,然后用于預測 train 和 test 的標簽列,分別是P1,T1,Model1_1 模型訓練:
訓練后的模型 Model1_1 分別在 train 和 test 上預測,得到預測標簽分別是P1,T1
Step 2. 基模型 Model1_2 ,對訓練集train訓練,然后用于預測train和test的標簽列,分別是P2,T2,model1_2 模型訓練:
訓練后的模型 Model1_2 分別在 train 和 test 上預測,得到預測標簽分別是P2,T2
Step 3. 分別把P1,P2以及T1,T2合并,得到一個新的訓練集和測試集train2,test2。
再用次級模型 Model2 以真實訓練集標簽為標簽訓練,以train2為特征進行訓練,預測test2,得到最終的測試集預測的標簽列 。
這就是我們兩層堆疊的一種基本的原始思路想法。在不同模型預測的結果基礎上再加一層模型,進行再訓練,從而得到模型最終的預測。
Stacking本質上就是這么直接的思路,但是直接這樣有時對于如果訓練集和測試集分布不那么一致的情況下是有一點問題的,其問題在于用初始模型訓練的標簽再利用真實標簽進行再訓練,毫無疑問會導致一定的模型過擬合訓練集,這樣或許模型在測試集上的泛化能力或者說效果會有一定的下降,因此現在的問題變成了如何降低再訓練的過擬合性,這里我們一般有兩種方法:
次級模型盡量選擇簡單的線性模型
利用K折交叉驗證
訓練:
預測:
混合法(Blending)
基本思想:Blending采用了和stacking同樣的方法,不過只從訓練集中選擇一個fold的結果,再和原始特征進行concat作為元學習器meta learner的特征,測試集上進行同樣的操作。
把原始的訓練集先分成兩部分,比如70%的數據作為新的訓練集,剩下30%的數據作為測試集。
第一層,我們在這70%的數據上訓練多個模型,然后去預測那30%數據的label,同時也預測test集的label。
在第二層,我們就直接用這30%數據在第一層預測的結果做為新特征繼續訓練,然后用test集第一層預測的label做特征,用第二層訓練的模型做進一步預測。
Blending訓練過程:
整個訓練集劃分成訓練集training sets和驗證集validation sets兩個部分;
在training sets上訓練模型;
在validation sets和test sets上得到預測結果;
將validation sets的原始特征和不同基模型base model預測得到的結果作為新的元學習器meta learner的輸入,進行訓練 ;
使用訓練好的模型meta learner在test sets以及在base model上的預測結果上進行預測,得到最終結果。
Stacking與Blending的對比:
優點在于:
blending比stacking簡單,因為不用進行k次的交叉驗證來獲得stacker feature
blending避開了一個信息泄露問題:generlizers和stacker使用了不一樣的數據集
缺點在于:
blending使用了很少的數據(第二階段的blender只使用training set10%的量)
blender可能會過擬合
stacking使用多次的交叉驗證會比較穩健
Bagging
基本思想:Bagging基于bootstrap(自采樣),也就是有放回的采樣。訓練子集的大小和原始數據集的大小相同。Bagging的技術使用子集來了解整個樣本集的分布,通過bagging采樣的子集的大小要小于原始集合。
采用bootstrap的方法基于原始數據集產生大量的子集
基于這些子集訓練弱模型base model
模型是并行訓練并且相互獨立的
最終的預測結果取決于多個模型的預測結果
Bagging是一種并行式的集成學習方法,即基學習器的訓練之間沒有前后順序可以同時進行,Bagging使用“有放回”采樣的方式選取訓練集,對于包含m個樣本的訓練集,進行m次有放回的隨機采樣操作,從而得到m個樣本的采樣集,這樣訓練集中有接近36.8%的樣本沒有被采到。按照相同的方式重復進行,我們就可以采集到T個包含m個樣本的數據集,從而訓練出T個基學習器,最終對這T個基學習器的輸出進行結合。
算法流程:
Boosting
基礎思想:Boosting是一種串行的工作機制,即個體學習器的訓練存在依賴關系,必須一步一步序列化進行。Boosting是一個序列化的過程,后續模型會矯正之前模型的預測結果。也就是說,之后的模型依賴于之前的模型。
其基本思想是:增加前一個基學習器在訓練訓練過程中預測錯誤樣本的權重,使得后續基學習器更加關注這些打標錯誤的訓練樣本,盡可能糾正這些錯誤,一直向下串行直至產生需要的T個基學習器,Boosting最終對這T個學習器進行加權結合,產生學習器委員會。
下面給出加州大學歐文分校Alex Ihler教授的兩頁PPT:
Boosting訓練過程:
基于原始數據集構造子集
初始的時候,所有的數據點都給相同的權重
基于這個子集創建一個基模型
使用這個模型在整個數據集上進行預測
基于真實值和預測值計算誤差
被預測錯的觀測值會賦予更大的權重
再構造一個模型基于之前預測的誤差進行預測,這個模型會嘗試矯正之前的模型
類似地,構造多個模型,每一個都會矯正之前的誤差
最終的模型(strong learner)是所有弱學習器的加權融合
參考
【1】《機器學習》(西瓜書) 【2】《數據挖掘導論》 【3】《統計學習方法》 【4】集成學習-Voting 【5】模型融合方法概述往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,請回復“知識星球”喜歡文章,點個在看
總結
以上是生活随笔為你收集整理的【零基础入门数据挖掘】-模型融合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特殊时期之下的 AI 成功“逆行”,技术
- 下一篇: 【零基础入门数据挖掘】-特征工程