1. 程式人生 > >kaggle比賽整合指南

kaggle比賽整合指南

介紹

整合模型是一種能在各種的機器學習任務上提高準確率的強有力技術。在這篇文章中,我會分享我在Kaggle比賽中的整合方法。

在第一部分中,我們會討論從提交檔案中建立整合。主要包括:

  • 投票整合
  • 平均
  • 排名平均

第二部分我們會討論 通過 generalization/blending等方法來建立整合。

我會在後續回答為什麼整合能夠減少泛化誤差。最後我會展示不同的整合方法,包括它們的結果以及程式碼以供你自己去嘗試。

怎樣贏得機器學習比賽:你拿別人的結果和你自己的結果與做整合。 —— Vitaly Kuznetsov NIPS2014。

對提交檔案進行整合

最簡單方便的辦法就是對Kaggle提交的csv檔案直接進行整合。你只需要模型在測試集上的預測結果,而不需要重新訓練一個模型。它簡單快速,只需使用已有模型的預測結果,是拼隊的理想選擇。

投票整合(預測結果為類別時)

我們先看一下簡單的投票整合方法。來看看為什麼整合模型能夠減少錯誤率,和為什麼它能在模型間相關度較低時能取得更好的結果。

糾錯碼

在航天任務中,所有的訊號都被正確的傳達是非常重要的。

如果我們有一個二進位制字串形式的訊號,如:

1110110011101111011111011011

如果訊號在傳輸過程中有一位發生了翻轉(第二位),變成了

1010110011101111011111011011

那這可能是致命的。

糾錯碼中有一個編碼 解決方案。在最簡單的情況下,即糾錯碼是重複碼時:以同樣大小的資料塊多次傳遞訊號,並進行投票(以少數服從多數原則)。

Original signal:
1110110011
Encoded: 10,3 101011001111101100111110110011 Decoding: 1010110011 1110110011 1110110011 Majority vote: 1110110011

訊號失真很少發生且通常在局部發生,因此,多次投票依然出錯的可能性就更小了。

只要訊號失真不是完全不可預測的(有50%的機率發生),訊號就能被修復。

一個機器學習的例子

假設我們的測試集有10個樣本,正確的情況應該都是1:

1111111111

我們有3個正確率為70%的二分類器記為A,B,C。你可以將這些分類器視為偽隨機數產生器,以70%的概率產生”1”,30%的概率產生”0”。

下面我們會展示這些偽分類器通過投票整合的方法得到78%的正確率。

涉及到一點數學

All three are correct
  0.7 * 0.7 * 0.7
= 0.3429

Two are correct
  0.7 * 0.7 * 0.3
+ 0.7 * 0.3 * 0.7
+ 0.3 * 0.7 * 0.7
= 0.4409

Two are wrong
  0.3 * 0.3 * 0.7
+ 0.3 * 0.7 * 0.3
+ 0.7 * 0.3 * 0.3
= 0.189

All three are wrong
  0.3 * 0.3 * 0.3
= 0.027

我們看到有44%的概率投票可以校正大部分錯誤。大部分投票整合會使最終的準確率變成78%左右(0.3429 + 0.4409 = 0.7838)。

投票個數

跟重複碼相似,隨著編碼重複次數的增加對錯誤的校正能力也會增加,因此整合通常可以通過提高整合成員的個數來提升準確率。

Repetition_Code_On_Fading_Channel_Graph

同樣利用上面數學的數學公式:對5個有70%準確率的偽隨機分類器進行投票整合會得到83%的準確率。在大約66%的情況下投票可以校正1或2個錯誤編碼。(0.36015 + 0.3087)

相關性

在我第一次組隊參加2014年KDD杯比賽時,Marios Michailidis (KazAnova)提出了一些奇特的東西,他對我們所有的提交檔案計算 皮爾遜相關係數,並且挑選出一些效能較好且相關係數較低的模型。

從這些挑選出來的檔案中建立平均整合模型,給我們在排行榜上帶來了巨大的提升,50名的飛躍。不相關的預測結果的整合明顯比相關的整合結果要好,這是為什麼?

為了說明這一點,我們再舉3個簡單的模型。正確的情況仍然是全是1:

1111111100 = 80% accuracy
1111111100 = 80% accuracy
1011111100 = 70% accuracy.

這些模型的預測是高度相關的,當我們進行投票時,可以看到準確率沒有提高:

1111111100 = 80% accuracy

下面我們比較3個性能相對較差,但是高度不相關的模型:

1111111100 = 80% accuracy
0111011101 = 70% accuracy
1000101111 = 60% accuracy

但我們做整合進行投票得到結果:

1111111101 = 90% accuracy

結果得到了提升:整合低相關性的模型結果似乎會增加糾錯能力。

Kaggle案例:森林植被型別預測

forest2-150x100

當評價指標需要有力的預測時,比如多分類問題的準確率,少數服從多數投票法具有重要意義。

我們建立一個有500棵樹的隨機森林模型作為 起始模型,然後我們再建立更多的模型,並挑選出最好的一個。在這個問題中,我們選擇的一個ExtraTreesClassifier 模型表現得最好。

加權

接下來,我們討論加權投票。為什麼要加權?通常我們希望模型越好,其權重就越高。所以,在這裡,我們將表現最好的模型的投票看作3票,其它的4個模型只看作1票。

原因是:當表現較差的模型需要否決表現最好的模型時,唯一的辦法是它們集體同意另一種選擇。我們期望這樣的整合能夠對錶現最好的模型進行一些修正,帶來一些小的提高。

表一是5個模型訓練出來的結果,包括結果得分以及加權的得分。

MODEL PUBLIC ACCURACY SCORE
GradientBoostingMachine 0.65057
RandomForest Gini 0.75107
RandomForest Entropy 0.75222
ExtraTrees Entropy 0.75524
ExtraTrees Gini (Best) 0.75571
Voting Ensemble (Democracy) 0.75337
Voting Ensemble (3*Best vs. Rest) 0.75667

Kaggle案例:CIFAR-10 影象檢測

CIFAR-10是另一個用準確率衡量的多分類kaggle比賽。

這個比賽中,我們隊的隊長Phil Culliton,從dr. Graham那複製了一個好的模型,並第一個發現最好的引數設定。

然後他對大約30個提交檔案使用了投票整合的方法(所有的準確率得分在90%以上)。在整合模型中最好的單模型的得分為 0.93170.

程式碼

我們有一個簡單的投票指令碼 在 MLWave Github repo中找到. 它在kaggle的提交目錄中執行,並負責建立一個新的提交檔案。更新:Armando Segnini 已經加上了加權部分的程式碼。

Ensembling.訓練10個神經網路並平均它們的預測結果,這是一個相當簡單的技術,卻有相當大的效能改進。

這裡可能會有疑惑:為什麼平均會有如此大的幫助?這有一個對於平均有效的簡單的原因。假設我們有2個錯誤率70%的分類器,當2者結果一樣時,那就是這個結果;當2者發生分歧時,那麼如果其中一個分類器總是正確的,那麼平均預測結果就會設定更多的權重在那個經常正確的答案上。

這個作用會特別強,whenever the network is confident when it’s right and unconfident when it’s wrong.——Ilya Sutskever在深度學習的簡單概述中說道。

平均

平均可以很好的解決一系列問題(二分類與迴歸問題)與指標(AUC,誤差平方或對數損失)。

與其說平均,不如說採用了多個個體模型預測值的平均。一個在Kaggle中經常聽到的詞是“bagging submissions”。

平均預測常常會降低過擬合。在類與類間,你想要理想的平滑的將其分離,而單一模型的預測在邊界間可能會有一些粗糙。

overfit

上面這幅圖片來自這個kaggle比賽:不要過擬合!圖中黑線比綠線有更好的分割,綠色線已經從資料點中學習了一些噪聲。但不用擔心,平均多個不同的綠線應該使我們更接近黑線。

記住,我們的目標不僅是去記住這些訓練資料(這裡有比在隨機森林裡更加有效的方法來儲存資料),而且還要去對我們沒有看到的資料進行良好的泛化。

Kaggle案例: Bag of Words Meets Bags of Popcorn

popcorn-150x150

這是一個電影情感分析競賽,在以前的文章中,我們使用 線上感知機指令碼 得到了0.952的AUC.

這個感知機是一個線性分類器,在資料線性可分的情況下一定能找到一個分隔。這是一個受人喜歡的性質,但是你要意識到一旦達到這種分隔,分類器就會停止學習。它不一定會是新資料的最好的分隔。

那當我們隨機初始化5個感知機的權重,並通過平均來組合預測會發生什麼?結果是我們在測試集上的結果得到了提升,但這是為什麼呢?

MODEL PUBLIC AUC SCORE
Perceptron 0.95288
Random Perceptron 0.95092
Random Perceptron 0.95128
Random Perceptron 0.95118
Random Perceptron 0.95072
Bagged Perceptrons 0.95427

以上結果還能說明,整合能(暫時)使您不必瞭解特定機器學習演算法的更精細的細節與內部工作原理。如果整合起作用,那很好,如果沒起作用,那並無大礙。

perceptron-bagging

就算你平均10個相同的線性迴歸的結果也沒事。Bagging一個糟糕的交叉驗證與過擬合的提交有可能會增加多樣性從而給你帶來一點提高。

程式碼

我們已經在Github上釋出了一個 平均指令碼,它以.csv檔案作為輸入並得到一個平均的提交結果。更新:Dat Le已經添加了一個 幾何平均的指令碼。幾何平均能比普通平均表現的更好。

排名平均

當平均多個來自不同模型的輸出時,會出現一些問題。並不是所有的預測器的結果是完美 校準的, 它們可能會產生過高或過低的預測概率,或者預測在一定的範圍裡非常混亂。

在極端情況下,你可能會有一個這樣一個提交:

Id,Prediction
1,0.35000056
2,0.35000002
3,0.35000098
4,0.35000111

當評估指標是ranking或者像AUC一樣的閾值時,這些預測結果可能會在排行榜上表現的較好。但是當與類似下面這個模型進行平均時:

Id,Prediction
1,0.57
2,0.04
3,0.96
4,0.99

整合不會改變什麼。

我們的解決方案是:首先將預測結果進行一個排名,然後去平均這個排名。

Id,Rank,Prediction
1,1,0.35000056
2,0,0.35000002
3,2,0.35000098
4,3,0.35000111

在標準化平均排名在0到1之間後,你肯定會得到一個均勻分佈預測。排名平均結果:

Id,Prediction
1,0.33
2,0.0
3,0.66
4,1.0

歷史排名

排名需要一個測試集,所以當你要預測一個新樣本時,你該怎麼辦?你可以與老的測試集一起,重新計算排名,但這會增加你的解決方案的複雜性。

一個解決方案是使用歷史排名。儲存舊的測試集預測及其排名,現在當你預測一個新的測試樣例如“0.35000110”,你去找到最接近的歷史預測並取其歷史排名(在這裡最接近的歷史預測是“0.35000111”其歷史排名為“3”)。

Kaggle使用案例:獲得有價值的顧客挑戰賽

排名平均在基於排名和基於閾值的指標(如AUC)和搜尋引擎質量指標(如k平均精度)上表現良好。

這個 挑戰賽的目標 是對一個購物者成為一個重複顧客的概率進行排名。

我們隊首先將多個Vowpal Wabbit中的模型與一個R語言的GLMNet模型進行取平均,然後我們使用排名平均來提高完全相同的整合的情況。

MODEL PUBLIC PRIVATE
Vowpal Wabbit A 0.60764 0.59962
Vowpal Wabbit B 0.60737 0.59957
Vowpal Wabbit C 0.60757 0.59954
GLMNet 0.60433 0.59665
Average Bag 0.60795 0.60031
Rank average Bag 0.61027 0.60187

我已經在 Avito挑戰賽中寫過排名平均給了我們大幅的提升 。

finnally, when weighted rank averaging the bagged perceptrons from the previous chapter (1x) with the new bag-of-words tutorial (3x) on fastML.com we improve that model’s performance from 0.96328 AUC to 0.96461 AUC.

程式碼

排名平均指令碼 已被新增到了MLWave Github repos上。

Stacked Generalization & Blending

對預測檔案進行平均既簡單又好用,但這並不是頂級kaggle選手使用的唯一方法。stacking與blending也能讓你頗受收益。做好心理準備,接來下將要給你介紹屠龍技。

Netflix

Netdlix公司曾組織並普及了第一次資料科學比賽,在電影推薦挑戰賽中,參賽者們將整合發展成為了一門藝術,可能是太極端了以至於Netfilx公司決定不將獲勝方案應用到產品中。 因為這實施起來太複雜了。

不過,這個比賽湧現了很多論文與新穎的方法:

這些論文都比較有趣且可以閱讀的,當你想要提高你在Kaggle比賽中的成績時,可以點進去閱讀一下。

NetflixPrize

這是我工作這麼多年以來,最令人印象深刻的整合和看到的最好的成果,它融合了上百個預測模型來得到最終結果。我們線上下使用了一些新方法重新評估了一番,但是我們測試認為該模型對準確率提升效果似乎並不值得將它引入到生產環境——-Netflix 的工程師說。

Stacked generalization

Wolpert在1992的論文中對stacked generalization進行了介紹,比Breiman的論文 “Bagging Predictors“早了2年。Wolpert的另一成名的機器學習理論是:“沒有免費午餐定理

stacked generalization背後的基本思想是使用大量基分類器,然後使用另一種分類器來融合它們的預測,旨在降低泛化誤差。

下面來說下2折stacking:

  • 將訓練集分成2部分: train_a 與 train_b
  • 用train_a來擬合一個初級學習器對train_b進行預測
  • 用train_b來擬合同型別的學習器對train_a進行預測
  • 最後用整個訓練集擬合模型,並對測試集進行預測
  • 基於初級學習器的概率輸出,來訓練次級學習器

    一個stacker模型通過使用第一階段的預測作為特徵,比相互獨立的訓練模型能夠得到更多的資訊。

我們通常希望在第0層泛化器是全型別的,而不僅僅是彼此的簡單變化(比如我們想要 surface-fitters, Turing-machine builders, statistical extrapolators等等.)這樣,所有可能學習到訓練集規律的方法都會被使用到, 這就是所謂的初級學習器應該“跨越空間”意思的一部分.

[…]stacked generalization是將非線性泛化器組合從而形成新的泛化器的手段,是為了嘗試最好的整合每個初級泛化器。每個學習器資訊越多(在其他學習器上沒有重複),stacked generalization的結果就越好

Wolpert (1992) Stacked Generalization

Blending

Blending 一詞是Netflix的獲勝者們引入的。它與stacked generalization非常像,但更簡單並且資訊洩露風險更小。一些研究者們交換著使用“stacked ensembling”與“blending”這2個詞。

通過Blinding,不需要對訓練集建立折外預測(out-of-fold predictions ),你只需建立一個小的留出集,比如10%的訓練集做為留出。stacker模型只在留出集裡面進行訓練。

Blending的優勢:

  • 比stacking更加簡單
  • 能夠防止資訊洩露:generalizers和stackers使用不同的資料
  • 你不需要跟你的隊友設定一個相同的隨機種子來進行相同的分折 誰都可以將模型放入“blender”中,由blender來決定是否保留這個模型。

缺點:

  • 只使用了整體中資料一部分
  • 最終的模型有可能對留出集過擬合
  • stacking使用交叉驗證比使用單一留出集更加穩健 (在更多的折上進行計算)。

至於效能,兩種技術的得到的結果差不多,取決於你的個人喜好以及你更傾向於哪種技能。就我自己而言,我更喜歡stacking。

如果你不能做選擇的話,你可以同時選擇這2種,使用stacked泛化器建立stacked整合和折外預測。然後使用留出集在第三層進一步結合這些stacked模型。

Stacking with logistic regression

​ 使用邏輯斯諦迴歸做融合是一個非常經典的stacking方法。我找到一個指令碼很好的幫助我理解了這一方法。

​ 當建立一個用於預測的測試集時,你可以一次性完成該操作,或者利用折外估計的模型(out-of-fold predictors)完成。當然為了減少模型和程式碼的複雜性,我更傾向於一次性完成。

kaggle案例:“Papirusy z Edhellond”

在這個比賽中,我使用上面的blend.py指令碼,結合了8個模型(不同評價指標的ET RF GMB),然後使用邏輯斯諦迴歸給了我第2名的成績。

Kaggle案例: KDD-cup 2014

使用這個指令碼,我將Yan XU的AUC評分從0.605提高到了0.625。

Stacking with non-linear algorithms

​ 目前流行用於Stacking的非線性演算法有GBM,KNN,NN,RF和ET。

​ 非線性的Stacking在多分類任務中,使用原始特徵就能產生令人驚訝的提升。顯然,在第一階段中的預測提供了非常豐富的資訊並得到了最高的特徵重要性。非線性演算法有效地找到了原始特徵與元模型特徵之間的關係。

Kaggle案例: TUT Headpose Estimation Challenge

對於每一個標籤,將分別訓練一個獨立的整合模型。

接下來的表格顯示了每個獨立模型的得分表現,以及當他們使用extremely randomized trees來做stacking時提高的得分。

MODEL PUBLIC MAE PRIVATE MAE
Random Forests 500 estimators 6.156 6.546
Extremely Randomized Trees 500 estimators 6.317 6.666
KNN-Classifier with 5 neighbors 6.828 7.460
Logistic Regression 6.694 6.949
Stacking with Extremely Randomized Trees 4.772 4.718

我們看到使用了stack後,誤差減少了將近30%

程式碼

你可以在 out-of-fold probability predictions的MLWave Github repo中找到一個函式去使用out-of-fold probability predictions。你也可以使用numpy horizontal stacking (hstack)去建立融合資料。

Feature weighted linear stacking

t線性加權stacking就是,先將提取後的特徵用各個模型進行預測,然後使用一個線性的模型去學習出哪個個模型對於某些樣本來說是最優的,通過將各個模型的預測結果加權求和完成。使用線性的演算法可以非常簡單快捷地去驗證你的模型,因為你可以清楚地看到每個模型所分配的權重。

Blended prediction
Vowpal Wabbit對於線性加權stacking提出了一種創新性的用法。比如我們有以下訓練集,它有兩個特徵空間,一個是f,一個是s:

1 |f f_1:0.55 f_2:0.78 f_3:7.9 |s RF:0.95 ET:0.97 GBM:0.92

我們可以通過-q fs來構造二次方的特徵,它是 s-特徵空間f-特徵空間的互動項。在f-特徵空間中的特徵可以是原始的特徵,也可以是例子中的元特徵。

Quadratic linear stacking of models

​ 這方法並沒有名字,所以我給他造了一個。這方法跟線性stacking非常像,但它線上性的基礎上,額外構造了一系列模型之間預測結果的組合。這一方法在許多次實驗中都對評分有很大的提高。最值得提到的是在DrivenData上的比賽: Modeling Women’s Healthcare Decision competition

我們同樣使用之前提到的VW訓練集:

1 |f f_1:0.55 f_2:0.78 f_3:7.9 |s RF:0.95 ET:0.97 GBM:0.92

我們可以使用-q ss 訓練從而創建出s-特徵空間中模型預測之間的二階特徵互動項(如RF*GBM)。

它與線性加權stacking可以非常簡單地結合起來,比如說先算f和s的互動項,再加上s和s的互動項:-q fs -q ss

So now you have a case where many base models should be created. You don’t know apriori which of these models are going to be helpful in the final meta model. In the case of two stage models, it is highly likely weak base models are preferred.

So why tune these base models very much at all? Perhaps tuning here is just obtaining model diversity. But at the end of the day you don’t know which base models will be helpful. And the final stage will likely be linear (which requires no tuning, or perhaps a single parameter to give some sparsity). Mike KimTuning doesn’t matter. Why are you doing it?

Stacking 分類和迴歸

Stacking可以允許你使用分類器來完成迴歸問題,反之亦然。比如說,在一個二分類問題中,有人可能會嘗試使用線性分位迴歸 來完成分類任務。一個好的stacker應該可以從預測中提取出你想要的資訊,儘管迴歸通常並不是一個好的分類器。

而使用一個分類器做迴歸就有點棘手。你先離散化:將y均勻地分為幾個的類別。那麼一個要求你預測工資的迴歸問題就可以轉換為這樣的一個多分類的問題:

  • 所有低於20k的為類別1
  • 所有20k到40k之間的為類別2
  • 所有大於40k的為類別3

使用分類器預測出來的概率可以幫助迴歸函式取得更好的預測效果。

Stacking無監督特徵學習

沒有任何人說過我們使用stacking的時候一定要是有監督的。事實上你可以使用stacking技術來處理無監督學習的問題。

k-means聚類是最為流行的無監督演算法。Sofia-ML實現了一個快速的線上k-means演算法適用於這裡。

其他有意思的方法是 t-SNE:通過把資料降維2到3維,然後將它放到非性融合器來融合。使用留出集的方法感覺上是最安全的選擇。可以看看由 Mike Kim提出的解決方案,他使用了t-SNE向量,然後結合了xgboost: 0.41599 via t-SNE meta-bagging

t-SNE

Piotr給出的 t-SNE在分類任務中的視覺化表現

Online Stacking

我花了大量時間去研究一個叫online stacking的想法:首先從一個雜湊二值對映中建立一個小型的隨機樹。如果樹預測正確則增加其收益,反之減少其收益。然後我們將收益最大的樹,和收益最小樹的預測作為特徵。

它確實有效,然而只限於人造的資料,它確實可以把異或問題(XOR-problem)學習出來。但是它沒有在任何真實資料集上成功過,相信我,我已經試過了。所以,從此之後,對於只使用人造資料去驗證它們的新演算法的論文,我都會持懷疑的態度。

一個相似的想法在一篇論文中是有效的: random bit regression。在這裡,從特徵中構造了多個隨機的線性函式,最好的函式是由很強的正則項中產生的。這個方法我曾經在一些資料集上成功過。這會是我將來發表的主題。

一個(半)online stacking更加具體的例子是廣告點選預測問題。模型會在使用者近期行為的資料中預測更準,也就是當資料集具有時間效應的時候,你可以使用Vowpal Wabbit去訓練整個資料集,並使用一個更加複雜的工具比如說xgboost去訓練最後幾天的資料。你只需將xgboost的結果與樣本進行堆疊(stack),並讓Vowpal Wabbit盡其所能:優化損失函式。

The natural world is complex, so it figures that ensembling different models can capture more of this complexity. Ben Hamner ‘Machine learning best practices we’ve learned from hundreds of competitions’ (video)

一切皆為超引數(hyper-parameter)

當我們使用stacking/blending/meta-modeling時,一個良好的想法就是所有的行為都是融合模型的引數。

比如說:

  • 不標準化資料
  • 使用z標準化
  • 使用0-1標準化

這些都是可以去調從而提高整合的效果。同樣的,使用多少個基模型的數量也是可以去調整優化的。特徵選擇(前70%)或資料填補(缺失填補)也是一系列的引數。

使用隨機網格搜尋就是一個比較好的調參方法,它在調整這些引數的時候確實是有起到作用的。

模型選擇

你還可以通過組合多個整合模型來繼續優化你評分。

  • 這有一個特別的方法:使用平均,投票,或秩平均等方法來手動選擇表現好的整合模型。
  • 貪婪前向模型選擇 (Caruana et al.)。先使用一個或幾個好的模型作為基整合模型。然後不斷地增加使得評分提升最大的模型。當然你也可以在期間允許把模型放回去,這樣的話一個模型可能會被選擇很多次。
  • 使用遺傳演算法來做選擇,用交叉驗證得分作為適應度評分函式。可以看 inversion‘s solution 的解決方案:‘Strategy for top 25 position‘.
  • 受Caruana的啟發,我使用一個完全隨機的方法:通過隨機選擇整合(無放回),建立一個100或其他個數的整合。然後選擇其中評分最高的模型。

自動化操作

當我在 Otto product classification比賽中,使用了stacking策略,我很快的得到了前十的成績。我通過不斷的新增越來越多的基分類器,和bagging多個stack整合我的分數得到不斷的提高。

當我達到了7個基模型,用了6個stacker,一陣恐懼和憂鬱的感覺向我襲來。我是否能夠把所有這些都重現?這些複雜而又笨重的模型讓我偏離了快速而又簡單的機器學習的初衷。

我在後續的比賽中,都將時間花在了建造一個自動化stacking的方法。我們去訓練那些具有純隨機引數的純隨機演算法的基模型。我們寫了一個與Scikit-learn的Api協同工作的封裝器去負責訓練分類模型VW, Sofia-ML, RGF, MLP and XGBoost。

Whiteboard automated stacking

並行自動stacker的草稿

使用自動化stacking可以讓你輕鬆的打敗那些對該問題設計特定演算法的領域專家,各個模型的訓練都是可以分散式和並行化的。

你也可以在這裡看到自動化融合的程式碼:MLWave Github repo: “Hodor-autoML“.

在Otto product 分類比賽中,第1名和第2名融合了超過1000個不同的模型 可以在這裡看到更多: first placesecond place

我們為什麼要使用如此複雜的整合方法?

使用stacking,組合1000多個模型,計算幾十個小時這也太瘋狂了吧。這..確實是的。但是,這些怪物般的整合方法同樣有著它的用處:

  • 它可以使你贏得kaggle比賽
  • 它可以幫你打敗當前學術界效能最好的演算法
  • You can then compare your new-and-improved benchmark with the performance of a simpler, more production-friendly model
  • 總有一天,雖然現在的計算機和雲端還是很弱。你將做好準備
  • 不是所有基模型都要按時完成的。因為在整合方法中,即使損失一兩個模型也是可以接受的。
  • 自動化的大型整合策略可以通過新增正則項有效的對抗過擬合,而且並不需要太多的調參和特徵選擇。所以從原則上講,stacking非常適合於那些“懶人”
  • 每1%精度的提升,或許就可以使得你的投資減少大量的損失。更嚴肅的說:在醫療行業中,每1%的提升,你就能多拯救幾個生命。

閱讀擴充套件:

The natural world is complex, so it figures that ensembling different models can capture more of this complexity. Ben Hamner ‘Machine learning best practices we’ve learned from hundreds of competitions’ (video)

譯者:喬傑、胡濤

作為分享主義者(sharism),本人所有網際網路釋出的圖文均遵從CC版權,轉載請保留作者資訊並註明作者a358463121專欄:http://blog.csdn.net/a358463121,如果涉及原始碼請註明GitHub地址:https://github.com/358463121/。商業使用請聯絡作者。