向AI轉型的程式設計師都關注了這個號👇👇👇
機器學習AI算法工程 公眾號: datayx
集成學習Ensemble learning 中文名叫做集成學習,它並不是一個單獨的機器學習算法,而是將很多的機器學習算法結合在一起,我們把組成集成學習的算法叫做「個體學習器」。在集成學習器當中,個體學習器都相同,那麼這些個體學習器可以叫做「基學習器」。
個體學習器組合在一起形成的集成學習,常常能夠使得泛化性能提高,這對於「弱學習器」的提高尤為明顯。弱學習器指的是比隨機猜想要好一些的學習器。
在進行集成學習的時候,我們希望我們的基學習器應該是好而不同,這個思想在後面經常體現。 「好」就是說,你的基學習器不能太差,「不同」就是各個學習器儘量有差異。
集成學習有兩個分類,一個是個體學習器存在強依賴關係、必須串行生成的序列化方法,以Boosting為代表。另外一種是個體學習器不存在強依賴關係、可同時生成的並行化方法,以Bagging和隨機森林(Random Forest)為代表。
Stacking 的基本思想
將個體學習器結合在一起的時候使用的方法叫做結合策略。對於分類問題,我們可以使用投票法來選擇輸出最多的類。對於回歸問題,我們可以將分類器輸出的結果求平均值。
上面說的投票法和平均法都是很有效的結合策略,還有一種結合策略是使用另外一個機器學習算法來將個體機器學習器的結果結合在一起,這個方法就是Stacking。
在stacking方法中,我們把個體學習器叫做初級學習器,用於結合的學習器叫做次級學習器或元學習器(meta-learner),次級學習器用於訓練的數據叫做次級訓練集。次級訓練集是在訓練集上用初級學習器得到的。
過程1-3 是訓練出來個體學習器,也就是初級學習器。
過程5-9是 使用訓練出來的個體學習器來得預測的結果,這個預測的結果當做次級學習器的訓練集。
過程11 是用初級學習器預測的結果訓練出次級學習器,得到我們最後訓練的模型。
如果想要預測一個數據的輸出,只需要把這條數據用初級學習器預測,然後將預測後的結果用次級學習器預測便可。
訪問AI圖譜 技術分享社區
https://loveai.tech
Stacking的實現最先想到的方法是這樣的,
1:用數據集D來訓練h1,h2,h3...,
2:用這些訓練出來的初級學習器在數據集D上面進行預測得到次級訓練集。
3:用次級訓練集來訓練次級學習器。
但是這樣的實現是有很大的缺陷的。在原始數據集D上面訓練的模型,然後用這些模型再D上面再進行預測得到的次級訓練集肯定是非常好的。會出現過擬合的現象。
Stacking是模型融合的一個重要的方法,幾乎每個數據科學競賽的前幾名都會使用,接下來我主要是介紹stacking的原理。
相信大家看很多stacking的資料都會看到下面的這個圖:
這個圖很形象,他具體是這樣做的,
首先我們將訓練集使用kfold切分為k分,每一分包括一個驗證集和測試集,每次取其中k-1分訓練,另外的1分用來驗證,stacking是這樣做的,比如對於集成的第一個模型,clf1,我們使用kfold交叉驗證,那麼可以得到k個clf1模型,模型的類型是一樣的,但是模型裡面學到的參數不一樣,因為他們的訓練集是不一樣的,對與每一折的訓練,我們還有一個驗證集啊,那麼我們用訓練得到的模型在驗證集合上做一次預測,你想,因為這個時候我們的驗證集是不是只有1分,也就是只有train_set_number/k個樣本(train_set_number表示訓練樣本的個數),但是這只是一折啊,我們還有k折,每一折我們都會在驗證集上預測,所以最終對於clf1在驗證集上得到是不是train_set_number個結果,不用擔心是沒有重複的,因為你是kflod啊
是不是每一折的驗證集樣本都不會相同,也就是沒有哪個樣本同時出現在兩個驗證集上,這樣下來,我們就得到第一級的結果,也是train_set_number個結果。然後在每一折上,我們在測試集上做一次預測,那麼k個clf1模型預測k次得到了k個結果,也就是每一個樣本預測結果有k個,我們就取一下平均,看到是取平均,這樣取完平均以後每一個樣本在clf1模型上就得到一個預測結果。這只是一個模型的過程,因為我們需要集成很多個模型,那麼我重複n個模型,做法和上面是一樣的,假設我們有n個模型,那麼請問我們stacking第一層出來,在驗證集上得到的結果特徵是什麼維度?應該就是訓練樣本的個數行(train_set_number),列數就是n吧,因為n個模型啊,這就是我們對第一層結果的一個特徵堆疊方法,這樣第一層出來的結果又可以作為特徵訓練第二層,第二層任然可以使用stacking多個模型,或者直接接一個模型用於訓練,然後直接預測。那麼同樣,對於測試集第一層出來的維度是不是(test_set_number,n),也就是測試集樣本的行數,這樣是不是可以用第二層訓練的模型在這個上面預測,得到我們最後的結果。這個就是stacking的整個過程。
然後我們看一段stacking的代碼:
事實上還可以構造一個stacking的類,它擁有fit和predict方法
閱讀過本文的人還看了以下:
分享《深度學習入門:基於Python的理論與實現》高清中文版PDF+原始碼
《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼
《深度學習之pytorch》pdf+附書源碼
將機器學習模型部署為REST API
FashionAI服裝屬性標籤圖像識別Top1-5方案分享
重要開源!CNN-RNN-CTC 實現手寫漢字識別
yolo3 檢測出圖像中的不規則漢字
同樣是機器學習算法工程師,你的面試為什麼過不了?
前海徵信大數據算法:風險概率預測
【Keras】完整實現『交通標誌』分類、『票據』分類兩個項目,讓你掌握深度學習圖像分類
VGG16遷移學習,實現醫學圖像識別分類工程項目
特徵工程(一)
特徵工程(二) :文本數據的展開、過濾和分塊
特徵工程(三):特徵縮放,從詞袋到 TF-IDF
特徵工程(四): 類別特徵
特徵工程(五): PCA 降維
特徵工程(六): 非線性特徵提取和模型堆疊
特徵工程(七):圖像特徵提取和深度學習
如何利用全新的決策樹集成級聯結構gcForest做特徵工程並打分?
Machine Learning Yearning 中文翻譯稿
螞蟻金服2018秋招-算法工程師(共四面)通過
全球AI挑戰-場景分類的比賽源碼(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(列印收藏)
python+flask搭建CNN在線識別手寫中文網站
中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特徵工程
不斷更新資源
深度學習、機器學習、數據分析、python
搜索公眾號添加: datayx
長按圖片,識別二維碼,點關注
訪問AI圖譜
https://loveai.tech