[譯] 經過集成學習提升機器學習結果

集成方法的工做原理:bagging、boosting 和 stacking

集成學習能夠經過組合多種模型來提升機器學習的結果。這種方法相對於單個模型,能夠爲結果帶來更好的性能預測。這也是集成方法在諸多久負盛名的機器學習競賽(如 NetFlix 競賽、KDD 2009 和 Kaggle)中位居第一的緣由。*。html

Statsbot 團隊爲了讓你瞭解這種方法的優勢,邀請了數據科學家 Vadim Smolyakov 來帶你一塊兒深刻研究三種基本的集成學習技術。前端


集成方法是將多個機器學習技術組合成一個預測模型的元算法,它能夠進行 decrease variance (bagging)、bias (boosting) 或者 改進預測 (stacking)。python

集成學習能夠分紅兩組:android

  • 序列集成方法,是基礎學習對象按順序生成的(例如 AdaBoost)。 序列方法的基本動機是利用基礎學習對象之間的依賴性。經過加權先前錯誤標記的高權重示例,能夠提升整體性能。
  • 並行集成方法,是基礎學習對象並行生成的(例如 Random Forest)。 並行方法的基本動機是利用基礎學習對象之間的獨立性,由於錯誤能夠經過均衡來顯著減小。

大多數集成方法都使用單基學習算法來生成同類的學習對象,即相同類型的學習對象,從而造成集成ios

也有一些使用不一樣類型的方法,即不一樣類型的學習對象,會致使異構集成。爲了使集成方法比它的任何一個成員更精確,基礎學習對象必須儘量準確,儘量多樣化。git

Bagging

Bagging 表示自助匯聚(bootstrap aggregation)。下降估計方差的一種方法是將多個估計平均在一塊兒。例如,咱們能夠在數據的不一樣子集(隨機選擇和替換)上訓練 M 個不一樣的樹,並計算集成。github

Bagging 使用自助採樣來獲取訓練基礎學習對象的數據子集。爲了聚合基礎學習對象的輸出,bagging 使用分類投票迴歸平均算法

咱們能夠在鳶尾花數據集分類的背景下研究 bagging 問題。咱們能夠選擇兩個基礎估計器:一個決策樹和一個 k-NN 分類器。圖一顯示了基礎估計器的學習決策樹邊界以及應用鳶尾花數據集的 bagging 集成。bootstrap

Accuracy: 0.63 (+/- 0.02) [Decision Tree] Accuracy: 0.70 (+/- 0.02) [K-NN] Accuracy: 0.64 (+/- 0.01) [Bagging Tree] Accuracy: 0.59 (+/- 0.07) [Bagging K-NN]後端

決策樹顯示了 axes 的平行邊界,當 k=1 時的最近臨界點與數據點很是靠近。Bagging 集成使用 10 種基估計器來進行訓練,訓練數據的子採樣爲 0.8,特徵的子採樣爲 0.8。

相較於 K-NN bagging 集成,決策樹 bagging 集成具備更高的精確度。K-NN 對訓練樣本的擾動不太敏感,所以被稱爲穩定的學習對象。

將穩定的學習對象組合在一塊兒並不都是有利的,由於有時這樣的集成無利於提升泛化性能

圖中還顯示了在測試時,隨着集成度的提升精確度也會隨之提升。基於交叉驗證的結果,咱們能夠看到精確度的提高大約會在有 10 個基估計器時趨於穩定。所以,添加超過 10 個基估計器只會增長計算複雜度,而不會提升鳶尾花數據集的準確度。

咱們還能夠看到 bagging 樹集成的學習曲線。注意,訓練數據的平均偏差是 0.3,測試數據的偏差曲線是 U 型。訓練和測試偏差之間的最小差距發生在訓練集大小的 80% 左右。

一種經常使用的集成算法是隨機森林

隨機森林中,集成的每一棵樹都是從訓練集中用替換(例如,引導樣本)繪製樣本構建的。此外,不使用全部的特性,而是選擇一個隨機子集的特徵,進一步隨機化樹。

結果,森林的誤差略有增長,但因爲相關性較弱的樹木被平均化,從而致使方差減少,所以造成了一個總體上更好的模型。

在一個很是隨機的樹中,算法的隨機性更進一步:分裂閥值是隨機的。對於每一個候選特徵,閾值都是隨機抽取的,而不是尋找最具鑑別性的閾值,並選擇這些隨機生成的閥值中的最佳閥值做爲分割規則。這一般會使模型的方差減小得多一點,但代價是誤差增長得多一點。

Boosting

Boosting 是指可以將弱學習對象轉化爲強學習對象的一系列算法。Boosting 的主要原理是對一系列僅略好於隨機預測的弱學習模型進行擬合,例如小決策樹 —— 對數據進行加權處理。對前幾輪錯誤分類的例子給予更多的重視。

而後,經過加權多數投票(分類)或加權和(迴歸)組合預測,生成最終預測。Boosting 和 committee(如 bagging)的主要區別在於,基礎學習對象是按加權版本的數據順序進行訓練的。

下述算法描述了使用最普遍的,稱爲 AdaBoost 的 boosting 算法,它表明着自適應加強。

咱們看到,第一個基分類器 y1(x) 是使用相等的加權係數來訓練的,這些係數是相等的。在隨後的加強輪次中,對於被錯誤分類的數據點增長加權係數,對於正確分類的數據點則減少加權係數。

數量 epsilon 表示每一個基分類器的加權錯誤率。所以,加權係數 α 賦予更準確的分類器更大的權重。

AdaBoost 算法如上圖所示。每一個基學習器由一棵深度爲 1 的決策樹組成,從而根據一個特徵閥值對數據進行分類(分爲兩個區域),該區域由一個與其中一個軸平行的線性決策面隔開。該圖還顯示了測試精度如何隨着集成的大小和訓練測試數據的學習曲線的提升而提升。

梯度樹 Boosting 是 bootsting 對任意可微損失函數的推廣。它既可用於迴歸問題,也可用於分類問題。梯度 Boosting 以順序的方式創建模型。

選擇決策樹 hm(x) 在每一個階段使用給定當前的 Fm-1(x) 來最小化損失函數 L。

迴歸算法和分類算法在所使用的損失函數類型上有所區別。

Stacking

Stacking 是一種經過元分類器或元迴歸器來將多種分類或迴歸模型結合在一塊兒的集成學習技術。基於一套完整的訓練集對該基礎模型進行訓練,而後將該元模型做爲特徵所述基礎級模型的輸出進行訓練。

基礎級一般由不一樣的學習算法組成,所以 stacking 集成每每是異構的。下面的算法總結了 stacking。

上圖的右上子圖顯示瞭如下準確度:

Accuracy: 0.91 (+/- 0.01) [KNN] Accuracy: 0.91 (+/- 0.06) [隨機森林] Accuracy: 0.92 (+/- 0.03) [Naive Bayes] Accuracy: 0.95 (+/- 0.03) [Stacking Classifier]

Stacking 集成如上所示。它由 K-NN、隨機森林和樸素貝葉斯基分類器組成,其預測用 Logistic 迴歸做爲元分類器。咱們能夠看到 stacking 分類器實現了決策邊界的混合。該圖還代表,stacking 比單個分類器具備更高的精度,而且是基於學習曲線,沒有出現過擬合的跡象。

Stacking 是贏取 Kaggle 數據科學競賽的經常使用技術。例如,Otto 組產品分類挑戰的第一名是由 30 個模型組成的 stacking 集成,它的輸出被做爲三種元分類器的特徵:XGBoost、神經網絡和 Adaboost。更多細節能夠在查看。

代碼

本文生成全部圖像的代碼均可以在,你能夠在 ipython notebook 上查看。

總結

除了本文所研究的方法,在深度學習中使用多樣化訓練和精確的分類器來集成也是很是廣泛的方式。多樣化也能夠經過變化的架構、設置超參數以及使用不一樣的訓練技術來實現。

集成方法在具備挑戰性的數據集上很是成功地達到了創紀錄的性能,並在 Kaggle 數據科學競賽中名列前茅。

推薦閱讀

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索