Boosting到Stacking,概覽集成學習的方法與性能
選自Kdnuggets
機器之心編譯
參與:Jane W
集成學習(Ensemble learning)通過組合幾種模型來提高機器學習的效果。與單一模型相比,該方法可以提供更好的預測結果。正因為如此,集成方法在許多著名的機器學習比賽(如 Netflix、KDD 2009 和 Kaggle 比賽)中能夠取得很好的名次。
集成方法是將幾種機器學習技術組合成一個預測模型的元演算法,以達到減小方差(bagging)、偏差(boosting)或改進預測(stacking)的效果。
集合方法可分為兩類:
序列集成方法,其中參與訓練的基礎學習器按照順序生成(例如 AdaBoost)。序列方法的原理是利用基礎學習器之間的依賴關係。通過對之前訓練中錯誤標記的樣本賦值較高的權重,可以提高整體的預測效果。
並行集成方法,其中參與訓練的基礎學習器並行生成(例如 Random Forest)。並行方法的原理是利用基礎學習器之間的獨立性,通過平均可以顯著降低錯誤。
大多數集成方法使用單一基礎學習演算法來產生同質的基礎學習器,即相同類型的學習器,為同質集成。
還有一些使用異構學習器的方法,即不同類型的學習器,為異構集成。為了使集成方法比其中的任何單一演算法更準確,基礎學習器必須儘可能準確和多樣化。
Bagging
Bagging 是 bootstrap aggregation 的縮寫。一種減小估計方差的方法是將多個估計值一起平均。例如,我們可以在不同的數據子集上訓練 M 個不同的樹(隨機選擇)並計算集成結果:
Bagging 使用 bootstrap 抽樣來獲取訓練基礎學習器的數據子集。Bagging 使用投票分類和均值回歸來聚合得到基礎學習者的輸出。
我們可以在 Iris 數據集上研究 bagging 方法的分類效果。為了對比預測效果,我們選用兩個基準估計器:決策樹和 k-NN 分類器。圖 1 顯示了基準估計器和 bagging 集成演算法在 Iris 數據集上的學習決策邊界。
準確率:0.63(+/- 0.02)[決策樹]
準確率:0.70(+/- 0.02)[K-NN]
準確率:0.64(+/- 0.01)[bagging 樹]
準確率:0.59(+/- 0.07)[bagging K-NN]
決策樹的決策邊界與軸並行,而 K-NN 演算法在 k=1 時決策邊界與數據點緊密貼合。Bagging 集成了 10 個基礎估計器進行訓練,其中以 0.8 的概率抽樣訓練數據和以 0.8 的概率抽樣特徵。
與 k-NN bagging 集成相比,決策樹 bagging 集成實現了更高的準確率。K-NN 對訓練樣本的擾動較不敏感,因此被稱為穩定學習器。
集成穩定學習器不利於提高預測效果,因為集成方法不能有助於提高泛化性能。
最右側的圖還顯示了測試集的準確率如何隨著集成的大小而提高。根據交叉驗證的結果,我們可以看到準確率隨著估計器的數量而增加,一直到約 10 個基礎估計器時達到最大值,然後保持不變。因此對於 Iris 數據集,添加超過 10 個的基本估計器僅僅增加了計算複雜度而不增加準確率。
我們還可以看到 bagging 樹集成的學習曲線。注意訓練數據的平均誤差為 0.3,測試數據為 U 形誤差曲線。訓練誤差和測試誤差之間的最小差距出現在訓練集大小的 80%左右的位置。
常用的集成演算法類是隨機森林。
在隨機森林中,集成中的每棵樹都是由從訓練集中抽取的樣本(即 bootstrap 樣本)構建的。另外,與使用所有特徵不同,這裡隨機選擇特徵子集,從而進一步達到對樹的隨機化目的。
因此,隨機森林產生的偏差略有增加,但是由於對相關性較小的樹計算平均值,估計方差減小了,導致模型的整體效果更好。
在非常隨機化樹(extremely randomized trees)演算法中,進一步增加隨機性:分割閾值是隨機的。與尋找最具有區分度的閾值不同,每個備選特徵的閾值是隨機選擇的,這些隨機生成的閾值中的最佳值將作為分割規則。這通常能夠減少模型的方差,但代價是偏差的略微增加。
Boosting
Boosting 是指能夠將弱學習器轉化為強學習器的一類演算法族。Boosting 的主要原理是適應一系列弱學習器模型,這些模型只是稍微優於隨機猜測,比如小決策樹——數據加權模型。更多的權重賦值早期訓練錯誤分類的例子。
然後通過結合加權多數投票(分類)或加權求和(回歸)以產生最終預測。Boosting 與 bagging 等方法的主要區別是基礎學習器通過加權的數據進行順序訓練。
下面的演算法闡述了最廣泛使用的 boosting 演算法形式,稱為 AdaBoost,是 adaptive boosting 的縮寫。
我們看到第一個基礎分類器 y1(x) 使用全部相等的權重進行訓練。在隨後的 boosting 訓練中,增加錯誤分類的數據點的係數權重,同時減少正確分類的數據點的係數權重。
數值 epsilon 表示每個基礎分類器的加權誤差率。因此,係數權重 alpha 對更準確的分類器賦值更大的權重。
AdaBoost 演算法如上圖所示。每個基礎學習器由深度為 1 的決策樹組成,從而基於特徵閾值對數據進行分類,該特徵閾值將空間分割成由與一個軸平行的線性決策表面分開的兩個區域。該圖還顯示了測試集的準確率隨集合大小的增加而改善,同時顯示了訓練數據和測試數據的學習曲線。
梯度 boosting 樹(Gradient Tree Boosting)是 boosting 使用任意可微分損失函數的推廣。它可以用於回歸和分類問題。梯度 Boosting 以順序的方式構建模型。
在每一步,給定當前的模型 Fm-1(x),決策樹 hm(x) 通過最小化損失函數 L 更新模型:
回歸和分類演算法在使用的損失函數的類型上有所不同。
Stacking
Stacking 是一種集成學習技術,通過元分類器或元回歸聚合多個分類或回歸模型。基礎層次模型(level model)基於完整的訓練集進行訓練,然後元模型基於基礎層次模型的輸出進行訓練。
基礎層次通常由不同的學習演算法組成,因此 stacking 集成通常是異構的。下面的演算法概括了 stacking 演算法的邏輯:
下面是幾種演算法的準確率,表示在上圖右邊的圖形中:
準確率:0.91(+/- 0.01)[K-NN]
準確率:0.91(+/- 0.06)[隨機森林]
準確率:0.92(+/- 0.03)[樸素貝葉斯]
準確率:0.95(+/- 0.03)[Stacking 分類器]
stacking 集成如上圖所示。它由 k-NN、隨機森林和樸素貝葉斯基礎分類器組成,它的預測結果由作為元分類器的 Logistic 回歸組合。我們可以看到 stacking 分類器實現的混合決策邊界。該圖還顯示,stacking 能夠實現比單個分類器更高的準確率,並且從學習曲線看出,其沒有顯示過擬合的跡象。
在 Kaggle 數據科學競賽中,像 stacking 這樣的技術常常贏得比賽。例如,贏得奧托(Otto)集團產品分類挑戰賽的第一名所使用的技術是集成了 30 多個模型的 stacking,它的輸出又作為三個元分類器的特徵:XGBoost、神經網路和 Adaboost。有關詳細信息,請參閱以下鏈接:https://www.kaggle.com/c/otto-group-product-classification-challenge/discussion/14335。
代碼
生成文中所有圖片的代碼詳見 ipython notebook:
https://github.com/vsmolyakov/experiments_with_python/blob/master/chp01/ensemble_methods.ipynb。
結論
除了本文研究的方法之外,深度學習也常常通過訓練多樣化和準確的分類器運用集成學習方法。其中,可以通過改變架構、超參數設置和訓練技術來實現多樣性。
集成學習非常成功,該演算法不僅在挑戰性的數據集上頻頻打破性能方面的記錄,而且是 Kaggle 數據科學競賽的獲獎者常用的方法之一。
※FPS遊戲AI競賽結果公布:CMU和清華團隊分別獲冠亞軍
※智能音箱正在廝殺,高顏值能使遲到的出門問問快速突圍嗎?
※將未來信息作為正則項,TN加強RNN對對長期依賴的建模能力
※利用TensorFlow和神經網路來處理文本分類問題
TAG:機器之心 |
※Unit 5 Geophysical Methods of Exploration 地球物理勘探方法
※python開發利器,python shell和vim中都需要的tab補全方法
※Acta Neuropathol Commun:科學家們開發出診斷神經退行性疾病的新方法
※受AlphaGo啟發,AI重建量子系統新方法登上Nature Physics
※解決Electra越獄顯示Error:topanga錯誤的方法!
※jQuery UI API 類別-方法重載(Method Overrides)
※殭屍毀滅工程steam is not enabled錯誤解決方法
※CodeWarrior IDE使用Tips-使用burner將elf文件轉換生成HEX和BIN文件的方法和步驟詳解
※Ray Dalio的思考方法
※jQuery UI API 類別-方法(Methods)
※教程 | 5種快速易用的Python Matplotlib數據可視化方法
※Facebook漸變網路、多尺度DenseNet、最新街景數據集、集成學習新方法
※jQuery UI 小部件(Widget)方法調用
※DeepMind於Nature子刊發文提出非對稱博弈的降維方法
※絕地求生大逃殺BattlEye Launcher 998解決方法
※Python如何切入量子計算?ProjectQ或許是個好方法!
※蘋果iPhone打開簡訊iMessage就死機怎麼辦?附解決方法
※requests 庫的常用方法
※iPhone iOS 9系統源碼已被泄露至GitHub 越獄者或可找到新方法
※SOS大逃殺無限卡loading解決方法