在集成學習中,一般認爲Bagging的主要做用是下降方差,而Boosting的主要做用是下降誤差。Boosting能下降誤差很好理解,由於其原理就是將多個弱學習器組合成強學習器。但Bagging爲何能下降方差?或者說,爲何將多個強學習器組合起來方差就會下降?這是本篇想要探討的問題,而在這以前我認爲有必要先搞清楚方差和誤差的基本概念。html
首先來看方差的定義:設X爲隨機變量,則方差\(Var(X) = E[(X-E[X])^2]\),表示X與平均值\(E[X]\)之間差別的平方的指望值,用於刻畫X取值的散佈程度。算法
方差有兩個重要的性質,後文會用到:app
c爲常數,則 \[Var(cX) = E[(cX - E[cX])^2] = c^2E[(X-E[X])^2] = c^2Var(X) \qquad (1)\]機器學習
獨立隨機變量之和的方差等於各變量的方差之和:
\[Var(X_1 + \cdots + X_n) = Var(X_1) + \cdots +Var(X_n) \qquad (2)\]函數
一般對於一個模型而言,比起其在訓練集的表現,一般咱們更關心其在測試集上的表現,或者說但願瞭解其泛化性能。誤差-方差分解 (bias-variance decomposition)就是其中的一種重要工具。下圖形象地展現了誤差與方差的區別:工具
要理解模型的誤差和方差,首先須要作一個假設 (PRML中稱之爲「思惟實驗(thought experiment)")。假設咱們有不少個數據集,每一個數據集中的樣本都是從整體分佈\(\mathcal{P}\)中抽樣而得。對於其中一個特定的數據集\(\mathcal{D}\),在此數據集上學習算法獲得的單模型爲\(f(\textbf{x};\mathcal{D})\)。能夠看到對於不一樣的數據集\(\mathcal{D}\),學習到的模型都是不同的,所以一個學習算法的指望預測爲\(\bar{f}(\textbf{x}) = \mathbb{E}_{\mathcal{D}}[f(\textbf{x};\mathcal{D})]\),該值表示對於一個特定的樣本\(\textbf{x}\),不一樣單模型的平均預測值。性能
誤差 (bias) 定義爲:\(bias = \bar{f}(\textbf{x}) - y\),爲模型的指望預測與真實值之間的差別。學習
方差 (variance) 定義爲:\(variance = \mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D})-\bar{f}(\textbf{x}))^2]\),衡量模型對不一樣數據集\(\mathcal{D}\)的敏感程度,也能夠認爲是衡量模型的不穩定性。若方差大,則表示數據的微小變更就能致使學習出的模型產生較大差別。可能的情形是在訓練集上擬合的很好,到了測試集上因爲數據的改變導致準確率降低不少,這是典型的過擬合。測試
而對比上文中方差的公式 (\(Var(X) = E[(X-E[X])^2]\)),這裏其實是將\(f(\textbf{x})\)視爲隨機變量,而其隨機性來源於從同一個分佈抽樣獲得的不一樣數據集。spa
所以有了誤差和方差的定義,咱們就能推導出模型的指望泛化偏差:\[\begin{equation} \begin{aligned} \mathbb{E}_\mathcal{D}[E_{out}(f;\mathcal{D})] & = \mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D})-y)^2] \\ & =\mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D}) - \bar{f}(\textbf{x}) + \bar{f}(\textbf{x}) - y)^2] \\& = \mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D}) - \bar{f}(\textbf{x}))^2] + \mathbb{E}_\mathcal{D}[(\bar{f}(\textbf{x}) - y)^2] + \mathbb{E}_\mathcal{D}[2(f(\textbf{x};\mathcal{D}) - \bar{f}(\textbf{x}))(\bar{f}(\textbf{x}) - y)] \\&\\& 因爲\mathbb{E}_\mathcal{D}[f(\textbf{x};\mathcal{D})] = \bar{f}(\textbf{x}),最後一項消去 \\& \\& = \underbrace{\mathbb{E}_\mathcal{D}[(\bar{f}(\textbf{x}) - y)^2]}_{(bias)^2} + \underbrace{\mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D} - \bar{f}(\textbf{x}))^2]}_{variance} \end{aligned} \end{equation}\]
模型的指望泛化偏差由誤差和方差組成。通常來講,簡單模型誤差高,方差低;複雜模型方差高,誤差低。以下圖所示:
上圖顯示出模型複雜度對誤差和方差的影響,左面三幅圖是100個數據集生成的100個模型,從上至下的單模型複雜度提高;右面三幅圖中紅線表明左圖中各個單模型的平均,綠線表示真實函數。從左面三幅圖能夠看到模型越複雜方差也會越大,然而將模型平均後會比較接近真實函數,這說明覆雜模型誤差小,而簡單模型的狀況則正好相反。
能夠看到,一開始咱們說誤差-方差分解的理論是一個「思惟實驗」,是由於其是帶有幻想性質的。現實中咱們不會有不少個數據集,而每每只有一個數據集,若是選用的算法比較複雜,即方差大,則更可能的狀況是用咱們手上的數據集擬合而成的模型剛好是離真實函數較遠,這就產生了過擬合,而這種狀況實際上常常發生。因此爲何要下降方差?一句話解釋:方差大會致使過擬合,進而導致模型泛化性能下降。
一般下降方差的方法之一是將多個模型平均起來。假設有n個獨立同分布的模型,每一個模型的方差均爲\(\sigma^2\),則利用上文中方差的性質 (1) 和 (2) 可得:
\[Var(\frac{1}{n}\sum\limits_{i=1}^n X_i) = \frac{1}{n^2}Var(\sum\limits_{i=1}^nX_i) = \frac{\sigma^2}{n} \qquad (3)\]
這樣模型均值的方差僅爲單模型方差的\(\frac1n\)。然而在只有一個數據集的狀況下只能訓練出一個模型,也就無法求平均。因此爲了緩解這個問題,能夠採用有放回抽樣來模擬生成多個數據集,將每一個數據集訓練獲得的模型平均來下降方差,便是Bagging的基本思想。
設單模型的指望爲\(\mu\),則Bagging的指望預測爲
\[E(\frac{1}{n}\sum\limits_{i=1}^n X_i) = \frac1nE(\sum\limits_{i=1}^n X_i) = E(X_i) \approx \mu\]
說明Bagging總體模型的指望近似於單模型的指望,這意味總體模型的誤差也與單模型的誤差近似,因此Bagging一般選用誤差低的強學習器。
Bagging的抽樣是有放回抽樣,這樣數據集之間會有重複的樣本,於是違反了公式 (3) 中的獨立性假設。在這種狀況下設單模型之間具備相關係數 \(0<\rho<1\),則模型均值的方差爲:\[Var(\frac{1}{n}\sum\limits_{i=1}^n X_i) = \frac{\sigma^2}{n} + \frac{n-1}{n}\rho\sigma^2\]
上式中隨着n增大,第一項趨於0,第二項趨於\(\rho\sigma^2\),因此Bagging可以下降總體方差。而Bagging的拓展算法 —— 隨機森林,則經過在樹內部結點的分裂過程當中,隨機選取固定數量的特徵歸入分裂的候選項,這樣就進一步下降了單模型之間的相關性,整體模型的方差也比Bagging更低。
/