Ensemble的架構

Ensemble的方法就是一種團隊合作,好幾個模型一起上的方法。
- 第一步:通常情況是有很多的classifier,想把他們集合在一起發揮更強大的功能,這些classifier一般是diverse的,這些classifier有不同的屬性和不同的作用。
- 第二步:就是要把classifier用比較好的方法集合在一起,就好像打王的時候坦和DD都站不同的位置,通常用ensemble可以讓我們的表現提升一個檔次,一般在kaggle之類的比賽中,ensemble用的最多的也是效果最好的,一般前幾名都需要用ensemble。
Bagging
上圖表示了用自己采樣的資料進行Bagging的過程。在原來的N筆訓練資料中進行采樣,過程就是每次從N筆訓練資料中取N‘(通常N=N’)建立很多個dataset,
這個過程抽取到的可能會有重複的資料,但是每次抽取的是随機形成的dataset。每個dataset都有N'筆data,但是每個dataset的資料都是不一樣的,接下來就是用一個複雜的模型對四個dataset都進行學習得到四個function,
接下來在testing的時候,就把這testing data放到這四個function裡面,再把得出來的結果做平均(回歸)或者投票(分類),通常來說表現(variance比較小)都比之前的好,這樣就不容易産生過拟合。
做Bagging的情況:模型比較複雜,容易産生過拟合。(容易産生過拟合的模型:決策樹)目的:降低方差
決策樹的實際例子:初音問題
上圖可以看到,深度是5的時候效果并不好,圖中白色的就是class1,黑色的是class2.當深度是10的時候有一點初音的樣子,當深度是15的時候,基本初音的輪廓就出來了,但是一些細節還是很奇怪(比如一些凸起來的邊角)
當深度是20的時候,就可以完美的把class1和class2的位置差別開來,就可以完美地把初音的樣子勾勒出來了。對于決策樹,理想的狀況下可以達到錯誤是0的時候,最極端的就是每一筆data point就是很深的樹的一個節點,這樣正确率就可以達到100%(樹夠深,決策樹可以做出任何的function)但是決策樹很容易過拟合,如果隻用決策樹一般很難達到好的結果
強調一點是做Bagging更不會使模型能fit data,所有用深度為5的時候還是不能fit出一個function,所有就是5顆樹的一個平均,相當于得到一個比較平滑的樹。當深度是10的時候,大緻的形狀能看出來了,當15的時候效果就還不錯,但是細節沒那麼好,當20 的時候就可以完美的把初音分出來。
Boosting是用在很弱的模型上的,當我們有很弱的模型的時候,不能fit我們的data的時候,我們就可以用Boosting的方法
Boosting的訓練是有順序的(sequentially),Bagging是沒有順序的(可以同時train)
權重的更改
下面數學推導d1
那麼這個算法的實作過程
錯誤率低的classifier,arfa(t)大,最後在最終結果的投票上會有比較大的權重
下面舉個例子
讓分類對的權重小些,分類錯的權重大些
同理t=2
結果整合:這個三個分類器把平面分割成六個部分,左上角三個分類器都是藍色的,那就肯定就藍色的。上面中間部分第一個分類器是紅色的,第二個第三個是藍色的,但是後面兩個加起來的權重比第一個大,
是以最終中間那塊是藍色的,對于右邊部分,第一個第二個分類器合起來的權重比第三個藍色的權重大,是以就是紅色的。下面部分也是按照同樣道理,分别得到藍色,紅色和紅色。
是以這三個弱分類器其實本事都會犯錯,但是我們把這三個整合起來就能達到100%的正确率了。
AdaBoost證明推導
證明上界函數會越來越小
AdaBoost的神秘現象
本來深度是5的決策樹是不能做好初音的分類(隻能通過增加深度來進行改進),但是現在有了AdaBoost的決策樹是互補的,是以用AdaBoost就可以很好的進行分類。
T代表AdaBoost運作次數,圖中可知用AdaBoost,100棵樹就可以很好的對初音進行分類。
Gradient Boosting
Stacking
但是有個問題就是并不是所有系統都是好的,有些系統會比較差(如 小毛的系統不好),但是如果采用之前的設定低權重的方法又會傷害小毛的自尊心,
這樣我們就提出一種新的方法: 把得到的y當做新的特征輸入到一個最終的分類器中,然後再決定最終的結果。 對于這個最終的分類器,應當采用比較簡單的函數(比如說邏輯回歸),
不需要再采用很複雜的函數,因為輸入的y已經訓練過了。 在做stacking的時候我們需要把訓練資料集再分成兩部分,一部分拿來學習最開始的那些模型,另外一部分的訓練資料集拿來學習最終的分類器。