1. 程式人生 > >機器學習筆記十三:Ensemble思想(上)

機器學習筆記十三:Ensemble思想(上)

形象 alt fill data stat cli views LV 元素

從上面幾篇的決策樹開始,就能夠開始進入到集成學習(ensemble learning)了,與其說集成學習是一種算法,倒不如說集成學習是一種思想.
集成學習的思想也是非常自然非常符合人類直觀理解的. 用通俗的不能更通俗的話來說,要是一個機器學習器解決不了問題,那就多訓練幾個.再把這些學習器結合起來完畢機器學習任務. 能夠類比開會,一群人討論得到的解決的方法一般比一個人拍板的要好.
用過集成學習之後,一般來說,效果都會比某些單一的算法效果要好.所以,無論是為了排名還是為了其它的東西,kaggle等機器學習競賽一大部分方案都會使用集成學習的,你懂得.
這篇僅僅講集成學習的主要思想和最常見的學習策略.並不帶有太多的理論數學推導,在之後的下篇會增加進來.

一.概述

前面就已經講到了,集成學習的思想是,我們能夠訓練非常多個學習器,通過一定的結合策略,終於形成一個強的學習器.形象一點看下圖.
技術分享圖片
所以,你會非常自然的考慮:

我們通過如何的方式來得到n個學習器呢?
得到n個學習器之後,我們通過如何的策略來結合呢?

以下的內容就這兩個疑惑來講一下常見的訓練多個學習器的方法和結合多個學習器的方法.

二.怎麽得到多個學習器

這一部分舉兩個最常見的得到多個學習器的思路.一種是bagging,第二種是boosting.

Ⅰ.bagging

要理解bagging,首先知道bootstrap詞匯的故事.這個詞匯表示的是靴子上面的小環或者是懸掛物等等,通過這個小東西能夠方便穿靴子.意思是不依靠外界的幫助,或者叫做自助法.
在這裏表示一種有放回的抽樣方法.所以以後看到bootstrap這個詞不要不知道是什麽意思.相同,你可能會經常看到一個詞叫做bootstrap sampling

.這個詞的意思是自助採樣,對於N個樣本的訓練集,我從裏面隨機取出m個樣本,得到一個子訓練集.然後把這些樣本放回. 然後再取m個樣本,得到第二個子訓練集,再放回去………..重復這種步驟k次,得到k個子訓練集.
Bagging能夠看做是bootstrap aggregation的簡寫.
bagging得到多個學習器的方式為:

通過自助採樣的方法得到K個訓練集,然後分別在這K個訓練集上面訓練學習器.然後就得到了K個學習器.

非常easy的思想,形象一點例如以下圖所看到的.
技術分享圖片

須要註意的是,bagging對於弱學習器沒有限制,也就是說,你能夠用決策樹,SVM等等都是能夠的.一般經常使用的是決策樹和神經網絡.
由於baggin的隨機採樣思路,模型的泛化能力非常強,減少了模型的方差.可是對於訓練集的擬合程度就不是那麽好,也就是說偏差會大一些.
符合bagging思想的比較出名的學習算法就是隨機森林了,在後面會具體來講隨機森林.這裏先知道隨機森鈴的思想算是bagging即可.

Ⅱ.boosting

boosting的思想是:

訓練集(當中各個元素)的權重是依據學習器的表現來改變的.

這個和bagging就有非常大的不同了.bagging採用自助採樣的方式”產生”出多個訓練集.可是boosting僅僅有一個訓練集,可是訓練集中各個元素(輸入向量)的權重是不同的.

具體一點,boosting是先從具有初始權重的訓練集訓練出一個弱學習器1,然後依據弱學習器1的表現,來更新樣本的權重. 然後再具有新的權重的訓練集上面訓練弱學習器2,然後依據弱學習器2的表現來更新樣本的權重……..重復多次 ,得到m個學習器,最後整合這些弱學習器得到強學習器.
形象一點的話看下圖.
技術分享圖片
這裏並不具體展開講權重改變的具體細節,由於這篇的目的是高速理解思想,為後面的打基礎.更具體的在後面的博客會具體給出.
Boosting框架以下比較出名好用的就是Adaboost算法和提升樹了.後面都會講到.

三.通過如何的策略結合學習器

這裏僅僅能說要粗略的帶過了,由於後面會從具體的實例裏面體會怎麽結合各種學習器.比在這裏泛泛而談要實用得多.
重點是要好好理解bagging和boosting的思想.

機器學習筆記十三:Ensemble思想(上)