融合模型(Aggregation Model)
如果我們已經得到了一些特征或者假設,它們和我們做機器學習的目標有若干的一致性的話,我們可以將這些假設綜合起來,讓預測效果變得更好,這樣的模型被稱為融合模型。
融合模型是通過混合(mix)和組合(combine)一些假設的方式,得到更好的預測結果。
下面列舉了四種不同的混合組合方式,并給出了數學表示形式:
當有多個假設時,我們選擇檢驗誤差最小的假設作為我們最信任的目標函數:
![]()
-
我們現在有多個假設,我們可以給每個假設一個投票的權利,綜合所有假設的投票結果:
-
現在有多個假設,我們可以根據對于不同假設的信任程度,給予不同假設不同的票數,這種情況綜合了前兩種情況:
-
如果可以給每個假設指定一個函數作為系數,這個函數說明了在不同的條件下,票數的情況:
舉例
如果現在有一些比較弱的假設(如下圖中,只能進行橫軸和縱軸的分類平面),如果我們能將這些弱的分類器組合起來,就可以把數據有效的分隔開,得到一個強的分類器(弱分類器的組合)。

融合模型使得模型的能力更加強大,通過組合弱分類器的形式,類似之前介紹的特征轉換的能力;而通過組合和混合,得到了一個泛化能力更強的假設,又類似之前介紹的正則化的作用。所以,融合模型將特征轉換和正則化結合起來,一個合理的融合模型,從理論上是可以得到一個很好的假設的。
Blending
用于分類問題的Uniform Blending
這里像上面描述的那樣,通過每個假設投票的結果,得到對于每個數據的預測。這個投票的結果實際上反應了少數服從多數的原則,通過多數意見修正少數的意見,少數的意見可能是有一些錯誤。
最終,通過民主投票的機制得到一個更加復雜的分類邊界。

用于回歸問題的Uniform Blending

在回歸問題中,最終的假設其實是一系列假設的平均。
這里的大概意思是,對于同樣的待預測數據x,有些假設低估了實際的目標,gt(x) < f(x);而有些假設高估了實際的目標,gt(x) > f(x)。這樣平均下來的結果,可能有低估有高估,就減少了誤差的結果,平均下來得到一個更穩定、更準確的估計方式。
Uniform Blending的理論分析
我們這里分析一下任意一個gt(x)與目標函數的均方差的平均和綜合之后的假設G與目標函數的均方差的關系。

得到的這個式子告訴我們,avg((gt-f)2)和(G-f)2是有關系的,中間差了一個avg((gt-G)^2)。
以此類推,對于測試數據集,我們分析一下預測誤差,得到下面的式子。說明Eout(gt)的平均要比Eout(G)大,這說明理論上Uniform Blending的誤差要比gt的平均預測誤差更小,預測效果也更好。

小結
現在假設每次從一組數據分布中抽取N筆數據構造gt,平均T個gt,得到G。如果對這一動作取極限,得到期望值g hat。

我們下面用g hat代替上一小節中的G,得到gt和g hat的關系。
- g_hat代表了一些gt的共同意見,共識,consensus
- avg(Eout(gt))代表了該算法作用于不同的數據集的平均表現,是演算法表現的期望值
- avg(ε(gt-g_hat)^2)代表了gt與共識差別多大,說明了不同gt的意見有多么不一樣,多么分散,稱為variance
- Eout(g_hat)代表了共識的表現如何,稱為bias

我們可以知道平均的目的就是想辦法消除variance的過程,得到更穩定的表現。
Linear Blending
假設現在我們已經得到一些假設gt,Linear Blending是分配給不同的gt不同的票數,即給gt不同權重αt。最終得到的是gt的線性組合。

(1)得到使得模型訓練誤差最小的α
那么我們該如何得到最好的αt呢?一般的思路自然是要使得訓練誤差最小的αt,即min Ein(α)。

上面的式子和之前介紹過的進行特征轉換后的線性回歸模型很類似,這里要求αt>=0這個限制條件。這樣我們可以將gt(·)當做是特征轉換,然后利用線性回歸模型的方式求解α就可以了。
(2)忽略α的限制條件

在之前的線性回歸模型中,我們沒有用到系數的限制條件,這里我們該如何轉化αt>=0這個限制條件的問題呢?

上面的式子告訴我們,當αt < 0的時候,我們可以將αt·gt(x)看做是一個正的系數|αt|乘上一個反向的gt。
我們可以設想二元分類的情況,如果有一個假設,其錯誤率是99%,那么當我們反過來用的時候,可以得到一個錯誤為1%的假設,即正確率為99%的假設。從這個角度來看,我們可以不用在意αt的正負問題。
(3)gt的選擇
我們使用Blending算法,需要一些gt,那么gt通常是怎么得到呢?一般的,g從不同的模型,通過求最好的Ein得到的。
但是通過最小化Ein的方式進行選擇最好的gt,需要付出復雜度代價很大,所以我們要使用最小化驗證誤差進行g的選擇。所以,如果使用Ein來得到Linear Blending的gt就需要付出更大的復雜度代價了,很容易出現過擬合的問題。
實際上,Blending算法通過選擇使得驗證誤差Eval最小的αt
,而不是Ein;同時,為了讓驗證誤差Eval和之前得到的gt
相互獨立,故之前得到的gt
是從訓練集合Etrain
中得到的gt-
。
具體的流程是這樣的:
從比較小的
Dtrain
數據集中得到一堆g1-
,g2-
,...,gT-
,然后將驗證集合Dval
中的數據通過g-
轉換成Z空間的數據
![]()
Linear Blending可以通過線性模型學習經過轉換得到的(zn,yn),最后輸出的是通過g-
得到的α
,和使用所有現有數據訓練得到的g
而不再是g-
![]()
同樣的道理,我們也可以使用同樣的流程來運用非線性的模型求解這個問題,這樣就可以使得模型的能力更強,進而延伸到有條件的Blending模型(conditional blending)上,其缺點是可能出現過擬合的問題
如果上面不太明白g
和g-
的區別,請看一下【機器學習基礎】驗證小結的介紹。
Bagging(Bootstrap Aggregation)
之前我們假設事先已經得到一對g
,然后去做Blending的動作,現在我們可不可以一邊學習g
,一邊將這些g
綜合起來?
如何得到不同的g
首先,我們要考慮一下可以通過什么方式得到不同的g:
- 從不同的模型得到不同的g
- 同一個模型,不同的參數得到不同的g
- 如果是算法本來是有隨機的部分,可以得到不同的g
- 不一樣的數據集得到不同的g,比如在進行交叉驗證的時候,不一樣的數據集切割可以得到不一樣的g-
我們能不能通過一份數據得到不同的g呢?這就是我們接下來要做的工作。
再次回顧一下之前介紹的理論結果,即演算法的表現可以分成Bias和Variance。

這個理論背后的意義是,大家的共識比單一的意見(g)要好。
我們在之前的推導中要求有一組不同的數據,但是我們現在只有一筆數據可用,那么我們該如何做呢?
在上面的式子中的g的平均(g拔),是通過無限個數據集得到的g,然后進行平均;為了近似g的平均,我們使用有限個,但是很大的數量T代替;其次,利用統計學中bootstrapping方法來根據現有數據模擬生成新的數據。
bootstrapping
bootstrap采樣的數據是通過在原有N個數據中隨機平均地取出,記錄下來之后再放回去重新抽取,這樣取N次之后,得到的數據在統計學上稱為bootstrap sample。
Bagging

bootstrap aggregation(BAGging)的方法是通過bootstapping的機制生成一系列不同的
gt
,然后這些gt
用Uniform的方式投票,綜合起來。
舉例
下面的例子是用Pocket演算法求出的分類邊界,這里的步驟是用boostrap的方法得到不同的數據集,然后對每一筆數據集運用Pocket算法,讓每個Pocket算法跑1000次,得到25個分類線(灰色線),將這些分類線綜合起來得到最終的非線性的邊界(黑色線)。

轉載請注明作者Jason Ding及其出處
GitCafe博客主頁(http://jasonding1354.gitcafe.io/)
Github博客主頁(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
簡書主頁(http://www.lxweimin.com/users/2bd9b48f6ea8/latest_articles)
百度搜索jasonding1354進入我的博客主頁