集成學習系列:
Blending and Bagging
1 - 爲什麼要用aggregation
如果我們已經有了一些模型hypothesis ,或者已經有了一些feature ,這些hypothesis 可以幫助我們做預測,我們怎麼樣將這些已有的hypothesis 或者是有有預測性的feature 結合起來,讓它們在一起的時候可以work的更好。這樣的模型我們稱之爲aggregation model,也就是融合起來的模型。本篇介紹在aggregation 中非常典型的兩個做法,blending 和 bagging 。
那麼爲什麼要用aggregation 呢?
1.1 - 一個關於aggregation的故事
假如你有15個朋友,這15個朋友都告訴你明天股市的漲跌預測,那麼你在聽取了這15個朋友的預測之後,如何決定呢?
- select from usual performance
從他們的平常的表現中選擇最厲害的那個人,聽取他的意見作爲最後的決策依據,這也就是我們以前學過的validation 的方法,
- mix uniformly
但是如果只聽一個人的,白白浪費了其餘人的判斷力,浪費了資源。所以另一種方式是以每人一票的方式,讓這15個朋友進行投票,綜合他們的判斷做出最後的結果,
- mix non -uniformly
但是考慮到可能每一個人的能力確實不盡相同,所以可以選擇另外一種投票的方式:可以信賴的人給多一點的票數,不是那麼可以信賴的人的票數可以少一點。
- combine conditionally
又或者是可以根據具體的情況來進行選擇, 例如這些朋友中有些人擅長分析科技類的股票,有些人擅長傳統產業的股票,那麼在不同的情況下,就選擇聽取不同的人的意見。
- ⋯
我們想要將這15個人的意見融合起來的事情, 就是aggregation 想要做的事情,將每個人的預測結果融合起來以達到最好的結果。
我們將上述的這個問題用數學的形式表示出來:每一個朋友就代表每一個hypothesis :g1,g2,⋯,gT ,也就是說這樣就一共有15個預測模型。
- select from usual performance
G(x)=gt∗ with t∗=argmint∈1,2,⋯,T Eval(g−t)
- mix uniformly
G(x)=sign(∑t=1T1⋅gt(x))
- mix non -uniformly
G(x)=sign(∑t=1T αt⋅gt(x)) with αt≥0
通過參數α 給每一個gt 不同的權重。這種情況是包括前兩種情況的:
- 當αt=|[Eval(gt) smallest]| 的時候,是第一種情況。(其中1=|[◯]|,if ◯ 成立;0=|[◯]|,if ◯ 不成立)
- 當αt=1 的時候,是第二種情況。
- combine conditionally
G(x)=sign(∑t=1Tqt(x)⋅gt(x)) with qt(x)≥0
權重的參數不再是α ,而是變成了和輸入特徵x 相關的函數qt(x) 。
- 當qt(x)=αt 的時候,就是以上的第三種情形。
1.2 - Selection by Validation
G(x)=gt∗ with t∗=argmint∈1,2,⋯,T Eval(g−t)
考慮上述提出的最簡單的第一種情形,利用
Validation 來選擇最好的
gt 。這個方法的優點是簡單。但是該方法中有一個重要的假設,如果最終想要得到一個比較好的
gt∗ ,那麼首先在得到的一堆
g−t 中至少要有一個不錯的, 或者說是
strong 的。如果你的所有的朋友都對股市其實只是一知半解,那麼你最終得到的最好的那一個人的意見也不見得會好到那裏去。
而這裏我們重點要談論的
aggregation 不是這樣的。
aggregation 擅長做的事情是,在沒有一個很強的hypothesis 的時候,或者說有一堆比較弱弱的但是還勉強的hypothesis 的時候,把他們融合起來,通過集體的智慧,可以使得他們變的很強。這篇會講解具體的不同的aggregation 的做法。
1.3 - 爲什麼Aggregation可以work的很好呢
爲什麼aggregation 可以很好的work 呢,討論如下的一個二分類的問題,假設我們只可以使用垂直的線和水平的線對上述的data 進行分類(這樣的話模型的複雜度很低),那麼只用一條分割線無論如何都是不能完全劃分的。但是如果可以將不同的垂直的線和水平的線結合起來對數據進行劃分呢(這裏垂直的線和水平的線就是不同的hypothesis ),可能就可以得到比較好的結果。如下是結合了三條線對數據進行了劃分。
從以上的結果可以看出來,如果只有一些弱弱的hypothsis ,即那些只能是垂直或者是水平的線,但是如果將他們通過一定的方式合併起來的話,可能就會得到比較好的結果, 這裏例子中就是得到了一個比較複雜的分類邊界。這可能說明aggregation 拓展了model 的複雜度,這樣看來aggregation 的作用就好像是feature transform 一樣。
另一個對aggregation 可以work 的不錯的解釋是,當使用PLA 算法對如下的data 進行劃分的時候,會得到不同的分割線,其中的每一個都能將數據完美的分開,但是我們知道如果通過SVM 的話,可以得到有large -margin 的分隔超平面。而使用PLA 得到的可能就是圖中灰色的任意一條,但是通過aggregation ,或者說所有的這些灰色的線投票之後,就會得到一條比較largin margin 的線,在這種情況下aggregation 就會有large margin 的類似於regularization 的效果。
以前我們的認識是,feature transform 和regularization 是在做相反的事情,前者就像在踩油門,後者像是在踩剎車。而在做aggregation 的時候,好像同時在做這兩件事情:可能是feature transform ,使得model 更加的powerful ;也可能是regularization ,在幫助模型做一個比較適中的選擇。 所以如果可以把aggregation 做好的話,可能就同時將feature transform 和regularization 做好了。
上面比較直觀的講解了aggregation 的好處,接下來我們開始講解應該怎麼樣來做aggregation ,即怎麼樣把這些hypothesis 融合起來。
我們可以使用blending 的方法來做aggregation ,blending 這種方法主要用在我們已經收集到了一堆hypothesis ,即已經有了一些已知的模型,需要對它們進行融合的情形。
如果對所有的hypothesis 一視同仁,即給每一個g(x) 相同的權重來進行組合的話,這種方式成爲uniform blending。
對於二元分類binary classification 來說,uniform blending 給每一個hypothesis 相同的權重(所以叫uniform )來進行融合。根據融合的結果給出最終的判斷,如下:
G(x)=sign(∑t=1T 1⋅gt(x))
uniform blending 將所有迴歸的值取平均:
G(x)=1T∑t=1Tgt(x)
- 如果所有已知的g(x) 是相同的,那麼aggregation 是沒有效果的
- 如果所有已知的g(x) 差距很大,那麼對於一個數據點來說,有些g(x) 可能低估了, 有些g(x) 可能高估了,這樣的話,它們的平均值就可能會估計的更準確一下。
小結: 如果aggregation 這樣的方法想要work 的很好的話,有一個很重要的前提是g(x) 要有一定的多樣性diverse 。當g(x) 有一定的多樣性的時候,即使只是做很簡單的融合的操作,例如說uniform blending ,也會有很好的結果。
針對uniform blending 用於regression ,我們可以做簡單的理論分析來解釋爲什麼通過這樣的aggregation 的方式可以得到比單個的hypothesis 更好的結果。
uniform blending 用於regression 的一般方式是:
G(x)=1T∑t=1Tgt(x)
如果只是針對特定的
x ,那麼上式可以寫作:
G=1T∑t=1Tgt
接下來我們想要分析的問題是:
1T∑((gt−f)2)=avg(gt−f)2 和
(G−f)2 的大小關係,前者表示的是所有
g 在
x 上的平均錯誤,也可以理解爲任選一個
g 在
x 上的平均錯誤;後者是經過
aggregation 得到的
G 在
x 上的平均錯誤。
即比較g 的平均錯誤(因爲取到哪個都是不一定的)和G 的錯誤的大小關係。
avg ((gt−f)2)=avg(g2t−2gtf+f2)=avg(g2t)−2Gf+f2=avg(g2t)−G2+(G−f)2=avg(g2t)−2G2+G2+(G−f)2=avg(g2t−2gtG+G2)+(G−f)2=avg((gt−G)2)+(G−f)2(7)(8)(9)(10)(11)(12)
當對所有的x 進行計算的時候,可以得到如下的等式:
avg(Eout(gt))=avg(ε(gt−G)2)+Eout(G)
所以可以得到的是:
avg(Eout(gt))≥Eout(G)
也就是說在使用
uniform blending 這樣的
aggregation 做
regression 的時候,得到的結果
G 確實要比所有
g 的平均表現好。儘管不知道是不是比最好的那個
g 表現好。
2.4 - variance,bias
偏差bias 度量了學習算法的期望預測和真實結果之間的偏離程度,即刻畫了學習算法本身的擬合能力;
方差variance 度量了同樣大小的訓練集的變動所導致的學習性能的變化,刻畫了數據的擾動所造成的影響。
假設在每一輪的學習中,由N筆資料訓練得到gt ,共進行T輪的學習,每一輪使用來自同一分佈的不同的資料。假設T可以取到無窮多,則得到:
g¯=limT→∞G=limT→∞1T∑t=1Tgt=εD A(D)
avg(Eout(gt))=avg(ε(gt−g¯)2)+Eout(g¯)
avg(Eout(gt)) 代表的是學習算法A 表現的期望;Eout 稱爲bias ,也就是學習算法的期望預測和真實結果之間的偏離程度;avg(ε(gt−g¯)2) 稱爲方差variance ,不知道爲什麼要寫一個ε ,西瓜書上是沒有的。
所以一個學習算法的表現可以拆分爲兩項,這個學習算法產生的共識和每一個gt 和這個共識的差異。
這塊和西瓜書上寫的有點不符合:日後補充
E(f,D)=bias2(x)+var(x)+ε2 (西瓜書)
所以通過這樣的aggregation 的方式,可以看到降低了variance ,使得最終的學習算法的表現變好。
3 - Linear and Any Blending
linear blending 是要給每一個gt 不同的權重(票數)αt ,模型如下所示:
G(x)=sign(∑t=1Tαt⋅gt(x)) with αt≥0
那麼現在的問題就是要求解這些參數
αt ,求解的方法就是最小化
Ein 。
如果我們現在要做的是
Regression問題的話,我們求解
α 的策略當然就是最小化
square error 。
Linear blending for regression
minαt≥0Ein(α)=minαt≥01N∑n=1N(yn−∑t=1Tαtgt(xn))2
如果將(g1,g2,⋯,gT) 看做是xn 的特徵轉化 Φ ,那麼以上的問題就可以變爲我們熟悉的帶有特徵轉換的線性模型,如下(1)所示,只不過是多了一個條件。並且這個過程和probability SVM 中的two level learning 的方法很相像:第一步將SVM 用作一個特徵的轉換,然後使用logReg 做微調。
linear regression + transformation
minwi≥01N∑n=1N(yn−∑i=1d~wiϕi(xn))(1)
所以我們可以說:linear blending 就等於一個將許多的hypothesis 當成一個特徵轉化的線性模型,外加一個限制條件。即:
linear blending=linar model+hypothesis as transform+constraints。
minαi≥01N∑n=1Nerr(yn,∑t=1Tαtgt(xn))
這個問題的求解不同於以往的僅僅是多了個constraints 。對於binary classification 問題來說,如果在求解之後發現αt<0 ,那麼說明學習算法覺得這個αt 對應的gt 反過來用能更好的fitting 數據。所以在實際操作中通常都不考慮αt>0 這個條件限制。
所以linear blending 的解法就是加了feature transform 的linear model 的解法,其中的linear model 可以是線性迴歸,或者是邏輯斯蒂迴歸。
現在我們來關注一下一個基本的問題:那些gt 是怎麼產生的?通常這些gt 是在各自不同的model 下最小化Ein 得到的。
所以如果在做selection (見本篇第一節,aggregation 的第一種方式)的時候,如果是根據Ein 來做選擇的話,模型的複雜度就會更大(是不是可以理解爲越複雜的模型越容易被選到,因爲它可以擬合的很好,做到Ein 很小),所以我們通常會用Evalidation 來做選擇。
同樣的,如果我們使用Ein 作爲最小化的目標來做linear aggregation ,會導致更大的模型的複雜度,更加容易導致過擬合。也就是說,在實際應用中通常不使用Ein 來學習α ,因爲這樣很容易overfitting ,而是在Dval 上訓練 α 使得Eval 最小。並且在Dtrain 上得到一些g− ,
3.1 - Linear Blending
Linear Blending
- 將數據分爲train data 和validation data
- 從Dtrain得到g−1,g−2,⋯,g−T
- 將Dval中的數據(xn,yn) 利用g−1,g−2,⋯,g−T 這些“特徵轉換”變換爲(zn=Φ−(xn),yn) ,其中Φ−(x)=(g−1(x),⋯,g−T(x))
- 利用線性模型求解資料{(zn,yn)} 上的α ,α=Lin({(zn,yn)})
- 返回最後的結果GLinB(x)=Lin(innerprob(α,Φ(x))) ,
需要注意的是,Φ(x)=(g1(x),⋯,gT(x))
3.2 - Any Blending
在第4步中,我們也可以考慮不使用線性模型,而是使用非線性的模型(nonlinear SVM) ,這樣的方式稱爲Any Blending或者Stacking。
Any Blending
- 將數據分爲train data 和validation data
- 從Dtrain 得到g−1,g−2,⋯,g−T
- 將Dval 中的數據(xn,yn) 利用g−1,g−2,⋯,g−T 這些“特徵轉換”變換爲(zn=Φ−(xn),yn) ,其中Φ−(x)=(g−1(x),⋯,g−T(x))
- g=Any({(zn,yn)})
- 返回GanyB=g(Φ(x))
這樣模型會更加的powerful ,但是同時也更加容易overfitting 。所以any blending 要非常的小心, 要加regularization 等等。
4 - Bagging (Bootstrap Aggregation)
如果已經通過某些方法得到了很多的g ,我們可以通過blending 的方式將它們融合起來,使得最後的分類器表現的很好。如果每一個g 的權重(票數)是相同的, 那麼可以得到uniform blending 的aggregation 方式;如果權重不是相同的, 那麼就得到了linear blending ;如果想要得到更爲複雜的模型,在考慮在不同的模型下使用不同的權重的話,可以使用stacking 來做。
這裏有有一個很關鍵和很基礎的問題是,這些g 是怎麼來的呢,我們是不是可以一邊學習g ,一邊對它們進行融合。這是我們接下來要談論的問題。因爲aggregation 在g 非常的diverse 的時候會做的很好,所以我們就考慮怎麼樣可以得到不一樣的g 呢?
- 不同的模型可能會得到不同的g
- 對於用一個模型,不同的參數可能會得到不同的模型:例如對於GD 算法來說,當η=0.001,0.01,0.1⋯10 的時候會得到不同的模型。
- 不同的初始值可能會得到不同的模型,例如PLA 算法
- 資料的不同可以得到不同的模型,例如當在做cross validation 的時候,不用的幾份數據可能會得到不同的g 。
接下來我們使用的方式是使用同一份資料來製作不用的g (不同於cross validation 只能得到不同的g− ),利用的工具稱爲bootstrapping ,它的作用是從手上已有的資料來模擬一些不一樣的資料。
4.1 - Bootstrapping Aggregation
bootstrapping:從原有的N 筆資料中做N 次有放回的採樣(sampling with replacement )。既然是有放回的,那麼就可能存在原資料中的某一筆被採樣到了多次,或者一次都沒有被採樣到的情形。通過bootstrapping 這樣的方式得到的資料記爲D~t 。
bagging(bootstrap aggregation)
- 通過bootstrapping 的方式抽取大小爲N′ 的資料D~t
- 從資料D~t 利用算法A 中得到不同的gt
- 對gt 做融合 G(x)=Uniform({gt})
這樣的方法我們稱爲bootstrap aggregation , 一般我們稱之爲BAGging 。我們把底層的算法A 稱爲base algorithm ,建築在其上的演算法稱爲meta algorithm 。
Bagging 通過利用bootstrap 這樣的機制生出一系列的g , 然後使用uniform 的方式進行aggregation 。
4.2 - Bagging Pocket的表現
由於pocket 算法對於不同的資料表現會有很不同,如下圖中的灰色的線是使用pocket 算法在利用boostrap 機制得到的25組不同的資料上得到的25條不同的線。通過將這些線進行融合得到了一個非線性的邊界,如圖中黑色的線所示。
如果算法base algorithm A 對於數據的隨機性越敏感,那麼就會得到越多樣性的g ,這樣通過aggregation 的方式融合起來就會得到更好表現。
5 - 總結
這篇主要是aggregation 的基礎概念和方法的介紹。提到了blending 和bagging ,它們都屬於aggregation 的方法。aggregation 就是要把一堆的g 通過一定的方式進行融合變成一個G , 這個G 可能更復雜,或者可能更“中庸”,這樣就可能達到了feature transform 或者是regularization 的效果。 其中有一些基本的方式,例如uniform blending ;或者稍微複雜的linear blending 和any blending(stacking) ,這些可以通過two level learning 的求解其中的權重。 最後我們介紹了怎麼通過bootstrapping 的機制得到不同的g 來對它們進行融合。