(十)stacking 簡介

2021-02-13 coderpai

博客地址:https://blog.csdn.net/CoderPai/article/details/97646151點擊閱讀原文,更好的閱讀體驗

CoderPai 是一個專注於人工智慧在量化交易應用的算法實戰平臺,主要關注人工智慧在量化交易上面的應用。如果你對人工智慧感興趣,請快快關注 「CoderPai」 微信號(coderpai)吧。

(一)機器學習中的集成學習入門

(二)bagging 方法

(三)使用Python進行交易的隨機森林算法

(四)Python中隨機森林的實現與解釋

(五)如何用 Python 從頭開始實現 Bagging 算法

(六)如何利用Python從頭開始實現隨機森林算法

(七)AdaBoost 簡介

(八)Python 中的 AdaBoost 分類器實例

(九)AdaBoost 中參數對於決策邊界複雜度分析

(十)stacking 簡介(當前文章)

集成學習通過組合多種模型來改善機器學習的結果,與單一的模型相比,這種方法允許產生更好的預測性能。這就是為什麼在許多著名的機器學習競賽中,集成學習方法總是被優先考慮。集成學習屬於元算法,即結合數個「好而不同」的機器學習技術,形成一個預測模型,以此來降方差(bagging),減偏差(boosting),提升預測準確性(stacking)。今天,我們來學習的就是其中一個技術 stacking 方法。

如果你的模型沒有達到 50% 的正確率,並且你經常發現自己將機器學習模型調整到凌晨,但是你又只能提高一點點的性能。那麼,這篇文章非常適合你。

什麼是模型堆疊?

模型堆疊是一種數據科學基礎方法,它依賴於多個模型的結果,即將多個弱學習器的結果進行組織,往往勝過單一的強模型。過去幾年中大多數主要 kaggle 比賽的獲勝者在最終獲獎模型中都使用了模型堆疊。

堆疊模型類比於現實世界的例子,就比如商業團隊,科學實驗,或者體育團隊。如果團隊中的所有成員都非常擅長完成同樣的任務,那麼團隊就會摧毀任何需要這個任務的挑戰。

在現實中我們如何實踐?

下面你可以看到一個最近的主要 kaggle 比賽的最佳獲獎模型的例子:

注意:擁有足夠數量的數據以執行強大的模型堆棧非常重要。為了避免過度擬合,你需要在每個堆疊(訓練階段)進行交叉驗證,並將一些數據作為測試階段的數據,在訓練集和測試集上面保證模型的性能之間沒有太大的差異。

初始階段:你運行各種不同的獨立模型,並花一些時間分析其各自的性能指標,並考慮某些模型可能比其他模型做的更好的地方。

階段一集成:你選擇這些模型的小團隊,確保其預測係數之間的相關性較低,以確保你的 stacked model 允許較弱連結之間的大量交叉學習。你可以獲取預測的平均值並構建一個新表,該表將在第 2 階段輸入一個新的較小的模型團隊。

階段二集成:你運行新的模型集合,它將使用階段 1 中的平均預測度量作為要素,以便了解有關原始變量之間關係的新信息。

階段三集成:你重複相同的過程,將階段二中的模型的平均預測提供給最終的「元學習器」模型,該模型應該經過精心挑選,以適應你嘗試解決的問題類型。在上面的示例中,比賽者使用線性回歸作為最終模型,因為這可能是在初始階段作為獨立模型表現最佳的模型之一。

我們都應該試試嗎?

絕對!!對於我的第一次模型堆疊實驗,我決定擴展我最新的數據科學項目,這是一個自然語言處理模型,旨在從歌詞中預測歌曲的類型。對於該項目,我們預處理了來自八種不同類型的 16000 首歌詞列表:嘻哈,鄉村,流行,搖滾,金屬,電子,爵士和R&B。我們確保在我們的數據集中包含每種類型的 2000 首歌曲,以避免類不平衡的問題。第一步是運行各種基本模型,其預測方法之間的相關性較低,以便能夠相應的構建我們的模型堆疊塊,請看下面的結果:

接下來,我們決定採用前3個模型並通過廣泛的 GridSearch 進行一些超參數優化,以便了解我們的頂級獨立模型可以實現的最高精度。結果如下:

正如你從下面的圖表中看到的那樣,我們的最佳表現達到了 50%,咋一看似乎不是很高,但考慮到我們的模型視圖預測一首歌屬於哪種類型。而我們這個準確性已經是隨機猜測的四倍了。這意味著大約一半的時間,我們的模型準確的預測了一首歌的類型,僅基於該歌曲的歌詞,並且在超過3000首歌曲的測試集上達到了 50% 的測試準確度,這個結果已經相當好了。

首先,我選擇結合併平均我的三個最弱學習器的預測:隨機森林,adaboost和KNN分類器,並構建一個新的數據框架,我可以提供給我們最強大的學習器。代碼如下:

上表中的每一列是八個類型中的每一個的平均預測係數,並且每一行是具有對應的真實類型的歌詞,存儲在作為類標籤列表的單獨的 y 變量中。

接下裡,我將數據分為訓練集和測試集,並且運行模型堆棧的第二階段,我的強學習器:GradientBoost 和樸素貝葉斯,使用來自弱學習器的組合預測來生成一組新的預測。然後,我將第二階段的預測結果合併到一個最終的數據框架中,我希望將其提供給我的最終元學習器:NN。

我選擇使用神經網絡進行模型堆疊的最後階段,因為 NN 往往在多分類問題上表現很好,並且 NN 非常善於找到隱藏特徵並找出依賴變量和自變量之間的複雜關係,我使用 softmax 作為輸出層激活函數,因為我們師徒預測八個類別,最終結果如下:

最後的想法

當我在我最初的 NLP 項目中看到這個模型堆疊實驗的結果時,我是非常驚訝的,80% 的正確率是在測試數據集上面產生的,該測試數據由 NN 模型以前從未見過的 3600 首歌詞組成。交叉驗證的訓練準確率達到 86% 也是非常令人印象深刻的,讓我特別高興的是訓練集和測試集上面沒有顯著差異,這是非常好的。

我多次檢查我的代碼和數學,以確保我的交叉驗證和訓練/測試在每個階段都有效,因為性能提升 30% 似乎有點不太可能。但我找不到任何我的代碼中的錯誤。因此,我對使用模型堆疊的第一次嘗試感到非常高興。

作者:chen_h

微信號&QQ:862251340

相關焦點

  • (十二)利用 vecstacks 自動進行 stacking
    (一)機器學習中的集成學習入門(二)bagging 方法(三)使用Python進行交易的隨機森林算法(四)Python中隨機森林的實現與解釋(五)如何用 Python 從頭開始實現 Bagging 算法(六)如何利用Python從頭開始實現隨機森林算法(七)AdaBoost 簡介(八)Python
  • 基於 Python 的 Stacking 集成機器學習實踐
    下面的get_stacking()函數通過首先為五個基本模型定義一個元組列表,然後定義邏輯回歸元模型以使用5倍交叉驗證組合來自基本模型的預測來定義StackingClassifier模型。# get a stacking ensemble of modelsdef get_stacking(): # define the base models level0 = list() level0.append(('lr', LogisticRegression())) level0.append(
  • Stacking 模型融合詳解(附python代碼)
    在stacking方法中,我們把個體學習器叫做初級學習器,用於結合的學習器叫做次級學習器或元學習器(meta-learner),次級學習器用於訓練的數據叫做次級訓練集。次級訓練集是在訓練集上用初級學習器得到的。
  • 從Boosting到Stacking,概覽集成學習的方法與性能
    集成方法是將幾種機器學習技術組合成一個預測模型的元算法,以達到減小方差(bagging)、偏差(boosting)或改進預測(stacking)的效果。集合方法可分為兩類:序列集成方法,其中參與訓練的基礎學習器按照順序生成(例如 AdaBoost)。
  • 常用的模型集成方法介紹:bagging、boosting、stacking
    stacking,該方法通常考慮的是異質弱學習器,並行地學習它們,並通過訓練一個「元模型」將它們組合起來,根據不同弱模型的預測結果輸出一個最終的預測結果。非常粗略地說,我們可以說 bagging 的重點在於獲得一個方差比其組成部分更小的集成模型,而 boosting 和 stacking 則將主要生成偏置比其組成部分更低的強模型(即使方差也可以被減小)。
  • 常用的模型集成方法介紹:bagging、boosting 、stacking
    本文將討論一些眾所周知的概念,如自助法、自助聚合(bagging)、隨機森林、提升法(boosting)、堆疊法(stacking)以及許多其它的基礎集成學習模型。 為了使所有這些方法之間的聯繫儘可能清晰,我們將嘗試在一個更廣闊和邏輯性更強的框架中呈現它們,希望這樣會便於讀者理解和記憶。
  • 模型堆疊(Stacking)和模型融合的原理與實現以及一個庫heamy的介紹
    向AI轉型的程式設計師都關注了這個號👇👇👇機器學習AI算法工程  公眾號:datayx最近想用下stacking只要知道stack是用cv交叉驗證來得出元模型的特徵(一個基模型產出一個元特徵作為二級模型的輸入),而blend是用留出法,比如百分之80作訓練,另外百分之20的預測值作為元模型的標籤(而stack是用全部的訓練集預測來產出一個基模型對應的標籤,二級模型只用那百分之20的預測值,這樣可以把堆疊用的數據集和二級模型泛化用的數據集分開,而stacking就沒有分開,所以stakcing有數據洩露,存在過擬合的風險
  • 十個門及爾灣周邊醫生簡介
    01   李端堂醫師(THOMAS T. LEE, M.D.)醫生簡介:李端棠醫生是美國南加州地區著名的婦產科專家,具有豐富的臨床經驗,在南加地區行醫三十餘年。醫生簡介:DrRussell Rapoza羅素,出生於1961年4月29日,婦產科專家。
  • 菜鳥學機器學習,Sklearn庫主要模塊功能簡介
    數據集主要圍繞分類和回歸兩類經典任務,對於不同需求,常用數據集簡介如下:load_breast_cancer:乳腺癌數據集,特徵為連續數值變量,標籤為0或1的二分類任務load_iris:經典鳶尾花數據集,特徵為連續數值變量,標籤為0/1/2的三分類任務,且各類樣本數量均衡,均為50個load_wine:紅酒數據集,與鳶尾花數據集特點類似,也是用於連續特徵的
  • 琉璃十世分別是哪十世詳細簡介 琉璃十世角色故事
    電視劇《琉璃》十世禹司鳳和褚璇璣十生十世的戀情,雖然每一世倆人都扮演者不同的角色和故事,但都是司鳳為了璇璣而死,把觀眾虐到心疼,琉璃十世分別是哪十世?分別是什麼角色和故事?下面帶來介紹。  琉璃十世分別是哪十世?  第一世:舞姬和琴師。
  • 機器學習中集成學習(Bagging, Boosting和Stacking)簡介和示例
  • 戴佩妮個人簡介
    國籍:馬來西亞生日:1978年4月22日星座:金牛座血型:B身高:157cm出生地:馬來西亞柔佛州昔加末簡介2000出道至今已發行10張個人全創作專輯和1張樂團專輯1張樂團EP,為他人發表作嫁歌曲十餘首。亞洲累計銷量破500萬張。2013年勇敢跨步,自創個人專屬音樂品牌「妮樂佛」,成為一生中最大的賭注。
  • 淘寶店鋪簡介 淘寶簡介應該怎麼寫
    一個好的店鋪簡介就好像是一件漂亮的衣服,自己打扮的漂亮了,門面有了,那麼顧客自然就被吸引過來了,店鋪的訪問量也就上來了,因此,一個好的店鋪簡介至關重要。想要運營好一個淘寶店鋪,店鋪簡介肯定是要下店功夫的,下面小編就和大家分享一下淘寶店鋪簡介怎麼寫淘寶店鋪簡介1、掌柜籤名店鋪的籤名或者是店鋪的一種展示,也可以說是店鋪的口號。
  • 藏傳佛教寧瑪派簡介
    寧瑪派標誌圖標寧瑪派也稱紅教,穿紅色僧衣。虹化成就(十地菩薩成就),虹光身成就(十地菩薩以上成就)。
  • 北京師範大學簡介
  • 作者簡介應該怎麼寫
    自找的,難道寫簡介時,就沒發現喧賓奪主了嗎?     簡介太略,顯得過于謙虛,合作方也覺不長臉,失面子。人都好面子,如長相,優秀了就吸眼球,雙方合作的事互相照顧可理解,但需恰當。太詳,又顯得過於浮亢,反給人華而不實之嫌。故,簡介還是不詳不略,不卑不亢,實事求是,恰好即可。
  • 臺灣自然法師簡介
    自然法師簡介1961年生於臺灣臺北,1990年於舊埔裡普賢淨行會,禮上悟下平老和尚,上體下通阿闍梨座下披剃。1991年於臺灣佛光山求受三壇大戒,經年恭讀「華嚴」「楞嚴」「法華」等經典。和尚以賢首為智學之本,提攜行者最初發心,念念之間照了大覺的根本面目,闡揚大乘教法,先後講述《普門品》《圓覺經》《心經》《楞嚴經》《金剛經》《阿彌陀佛四十八大願》等十餘部大乘經典。