誤差(Bias)和方差(Variance)——機器學習中的模型選擇

模型性能的度量

在監督學習中,已知樣本 $(x_1, y_1),(x_2, y_2),...,(x_n, y_n)$,要求擬合出一個模型(函數)$\hat{f}$,其預測值$\hat{f}(x)$與樣本實際值$y$的偏差最小。算法

考慮到樣本數據實際上是採樣,$y$並非真實值自己,假設真實模型(函數)是$f$,則採樣值$y=f(x)+\varepsilon$,其中$\varepsilon$表明噪音,其均值爲0,方差爲$\sigma^2$。網絡

擬合函數$\hat{f}$的主要目的是但願它能對新的樣本進行預測,因此,擬合出函數$\hat{f}$後,須要在測試集(訓練時未見過的數據)上檢測其預測值與實際值$y$之間的偏差。能夠採用平方偏差函數(mean squared error)來度量其擬合的好壞程度,即 $(y-\hat{f}(x))^2$app

偏差指望值的分解

通過進一步的研究發現,對於某種特定的模型(下面還會進一步說明「特定模型」的含義),其偏差的指望值能夠分解爲三個部分:樣本噪音、模型預測值的方差、預測值相對真實值的誤差機器學習

公式爲:
$$E((y-\hat{f}(x))^2) = \sigma^2 + Var[\hat{f}(x)] + (Bias[\hat{f}(x)])^2$$
其中 $Bias[\hat{f}(x)] = E[\hat{f}(x) - f(x)]$函數

即:偏差的指望值 = 噪音的方差 + 模型預測值的方差 + 預測值相對真實值的誤差的平方
先看一個圖比較直觀。性能

圖1 偏差指望值的分解

使用特定模型對一個測試樣本進行預測,就像打靶同樣。學習

靶心(紅點)是測試樣本的真實值,測試樣本的y(橙色點)是真實值加上噪音,特定模型重複屢次訓練會獲得多個具體的模型,每個具體模型對測試樣本進行一次預測,就在靶上打出一個預測值(圖上藍色的點)。全部預測值的平均就是預測值的指望(較大的淺藍色點),淺藍色的圓圈表示預測值的離散程度,即預測值的方差。測試

因此,特定模型的預測值 與 真實值 的偏差的 指望值,分解爲上面公式中的三個部分,對應到圖上的三條橙色線段:預測值的誤差、預測值的方差、樣本噪音。spa

理解偏差指望值

回顧一下,指望值的含義是指在一樣的條件重複屢次隨機試驗,獲得的全部可能狀態的平均結果(更詳細的定義參考維基百科-指望值)。對於機器學習來講,這種實驗就是咱們選擇一種算法(並選定超參數),以及設置一個固定的訓練集大小,這就是一樣的條件,也就是上文所說的特定的模型。而後每次訓練時從樣本空間中選擇一批樣本做爲訓練集,但每次都隨機抽取不一樣的樣本,這樣重複進行屢次訓練。每次訓練會獲得一個具體的模型,每一個具體模型對同一個未見過的樣本進行預測能夠獲得預測值。不斷重複訓練和預測,就能獲得一系列預測值,根據樣本和這些預測值計算出方差和誤差,就能夠幫助咱們考察該特定模型的預測偏差的指望值,也就能衡量該特定模型的性能。對比多個特定模型的偏差的指望值,能夠幫助咱們選擇合適的模型。圖片

進一步理解偏差指望值

再看一個更接近實際的例子,來自 Bias-Variance in Machine Learning

咱們設置真實模型 $f(x) = x + 2sin(1.5x)$,函數圖像以下圖曲線所示。
樣本值 y 就在真實值的基礎上疊加一個隨機噪音 N(0, 0.2)。

圖2 模型及樣本

如今咱們用線性函數來構建模型,訓練樣原本自隨機採集的一組 y,通過屢次重複,能夠獲得一系列具體的線性模型,以下圖中那一組彙集在一塊兒的黑色直線所示,其中間有一條紅色線是這一組線性函數的平均(指望值)。這就是特定模型(線性函數)在一樣條件下(每次取20個樣本點)重複屢次(獲得50個線性函數)。

根據生成的50個具體的線性函數來考察該線性模型的預測性能,選取一個樣本點,好比選擇 x=5 時(下圖中紅色豎線位置),真實值 f(x) = 6.876,樣本 $y \approx 6.876$,y 與 f(x) 的誤差體如今圖片右下方的噪音(noise) 部分。紅色線性函數在 x=5 位置的值是這50個線性函數在該位置的指望值,黑色直線在 x=5 位置的一系列值的分佈則反映了它們的方差(Variance)。50個預測的指望值與真實值 f(x) 之間的距離體現了誤差(Bias)。(參考下圖右下部分的 variance 和 bias)。

圖3 誤差、方差計算

總之,在機器學習中考察 誤差 和 方差,最重要的是要在不一樣數據集上訓練出一組特定模型,這些模型對一個測試樣本進行預測,考察這一組預測值的方差和誤差。

偏差的指望值公式推導

偏差的指望值公式爲何能夠分解爲 噪音、誤差和方差,能夠從數學上推導得來。先準備幾個推導中須要用到的公式,爲了方便,咱們簡化符號,記做
$$f = f(x) \
hat{f} = hat{f}(x)$$

  1. 方差的定義和計算公式

$$Var[X] = E[X^2] - (E[X])^2$$
即 隨機變量X的方差 = X平方的指望 - X指望的平方(參考 維基百科-方差),移項後獲得
$$E[X^2] = Var[X] + (E[X])^2 \qquad(1)$$

  1. 測試樣本y的指望值

由於真實值$f$是一個肯定的值,因此
$$E[f] = f$$
另外根據上文測試樣本值和噪音的定義
$$y=f+varepsilon \
E[varepsilon]=0 \
Var[varepsilon] = sigma^2$$
因此$E[y] = E[f+\varepsilon] = E[f] = f$,即
$$E[y] = f \qquad(2)$$

  1. 測試樣本y的方差

$$ Var[y] = E[(y - E[y])^2] = E[(y-f)^2] \\ = E[(f+\varepsilon-f)^2] = E[\varepsilon^2] \\ = Var[\varepsilon] + (E[\varepsilon])^2 = \sigma^2 $$


$$Var[y] = \sigma^2 \qquad(3)$$

  1. 樣本噪音與預測值無關

由於 $\varepsilon$ 與 $\hat{f}$ 不相關,因此
$$E[\varepsilon\hat{f}] = E[\varepsilon]E[\hat{f}] \qquad(4) $$
(參考維基百科-指望值)

  1. 偏差的指望

公式推導以下

$$ E[(y-\hat{f})^2] = E[y^2 + \hat{f}^2 - 2y\hat{f}] \\ = E[y^2] + E[\hat{f}^2] - E[2y\hat{f}] \\ = \Big(Var[y] + (E[y]))^2 \Big) + \Big(Var[\hat{f}] + (E[\hat{f}])^2 \Big) - E[2(f+\varepsilon) \hat{f}] \\ = Var[y] + Var[\hat{f}] + (E[y])^2 + (E[\hat{f}])^2 - E[2f\hat{f} +2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - E[2f\hat{f}] -E[2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] -2E[\varepsilon]E[\hat{f}] \\ = Var[y] + Var[\hat{f}] + \Big(f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] \Big) \\ = Var[y] + Var[\hat{f}] + (f - E[\hat{f}])^2 \\ = \sigma^2 + Var[\hat{f}] + (Bias[\hat{f}])^2 $$

最後獲得的三個項分別是:噪音的方差、模型預測值的方差、預測值相對真實值的誤差的平方。

誤差 - 方差的選擇

理想中,咱們但願獲得一個誤差和方差都很小的模型(下圖左上),但實際上每每很困難。


選擇相對較好的模型的順序:方差小,誤差小 > 方差小,誤差大 > 方差大,誤差小 > 方差大,誤差大。
方差小,誤差大 之因此在實際中排位相對靠前,是由於它比較穩定。不少時候實際中沒法得到很是全面的數據集,那麼,若是一個模型在可得到的樣本上有較小的方差,說明它對不一樣數據集的敏感度不高,能夠指望它對新數據集的預測效果比較穩定。

選擇假設集合

不少時候,機器學習所面臨的問題,咱們事先並不確切的知道要擬合的是一個怎樣形式的函數,是幾回多項式,是幾層神經網絡,選擇樣本的哪些特徵,等等,都缺少先驗的知識來幫助咱們選擇。咱們在一個基本上無窮大的假設(模型)集合中,憑藉有限的經驗進行嘗試和選擇。

機器學習有多種算法,以及每種算法中常常又能夠選擇不一樣的結構和超參數。它們所覆蓋的假設集合有不一樣的大小。因此,選擇一種算法(包括其結構和超參數),就是選擇(限定)了一個假設集合。咱們指望真實模型存在於咱們所選定的假設集合範圍內,而且該假設集合越小越好。

下面兩幅圖粗略表現了不一樣假設集合的關係

不一樣的假設集合

正則化項對假設集合的影響

咱們思考一下監督學習的整個流程,其實就是一個不斷縮小假設集合的過程。從大的方面看能夠分爲兩個步驟。

  1. 選擇一個假設集合,包括模型及相關結構、超參數等。
  2. 使用樣本數據進行訓練,使該模型儘可能擬合樣本,就是從上面選定的假設集合中找到一個特定的假設(模型)。

上面第一個步驟中,咱們能夠選擇一些不一樣的假設集合,而後經過考察它們的誤差方差,對各假設集合的性能進行評估。好比多項式的次數,上圖假設真實模型是一個二次多項式,那麼線性函數集合中的模型會欠擬合(方差低,誤差過高),高次多項式集合中的模型容易過擬合(方差過高,誤差低),二項式集合中的模型可以有較好的折中(方差和誤差都相對較低),整體偏差最小。

誤差 - 方差權衡

下面幾個案例來自 Andrew Ng 的公開課《Machine Learning》。

  1. 多項式迴歸

多項式迴歸模型,咱們能夠選擇不一樣的多項式的次數,對模型的影響以下。

多項式次數對模型誤差方差的影響

多項式次數 模型複雜度 方差 誤差 過/欠擬合
欠擬合
適度
過擬合

多項式次數對訓練偏差/測試偏差的影響

多項式次數 模型複雜度 訓練偏差 測試偏差
  1. 正則化項

添加正則化項(Regularization)至關於對模型參數施加懲罰,壓縮了參數的範圍,限制了模型的複雜度,從而有助於緩解模型過擬合問題,選擇不一樣的 正則化項權重λ 對模型的影響以下。

正則化項對模型誤差方差的影響

正則化項權重λ 模型複雜度 方差 誤差 過/欠擬合
欠擬合
適度
過擬合

正則化項對訓練偏差/測試偏差的影響

正則化項權重λ 模型複雜度 訓練偏差 測試偏差
  1. 樣本數量

通常來講,咱們但願樣本數量越多越好。隨着樣本數量增長,訓練偏差會逐漸增加,測試偏差會逐漸下降。

樣本數量對訓練偏差/測試偏差的影響

模型方差較高時,增長樣本會有幫助

模型誤差較高時,增長樣本幫助不大

  1. 神經網絡

神經網絡結構

神經網絡結構 模型複雜度 方差 誤差 過/欠擬合
欠擬合
適度
過擬合

K-Fold 交叉驗證

計算誤差、方差能夠幫助評估不一樣的假設集合,不過它須要較多的樣本,以及重複屢次擬合模型,須要比較多的數據和計算資源(參考上面圖3)。

實際中,比較經常使用的方法是K-Fold交叉驗證。它與標準的誤差、方差計算過程不太同樣。簡單的說,就是將訓練樣本分紅k份,每次取其中一份做爲驗證集,另外 k-1 份做訓練集。這樣進行 k 次訓練獲得 k 個模型。這 k 個模型對各自的驗證集進行預測,獲得 k 個評估值(能夠是偏差、準確率,或按某種規則計算的得分等等)。注意到每一個樣本參與了 k-1 個模型的訓練(致使模型之間存在關聯),每一個樣本有一次被用做測試(沒有用另外的從未見過的測試集數據),因此這與標準的計算過程是不同的。

不過,K-Fold依然是頗有價值的模型性能評估。能夠直接針對這 k 個模型的評估值(偏差、準確率,或按某種規則計算的得分等等)進行分析,取其平都可以體現該模型的預測準確性。對這 k 個值,好比k個偏差值,計算方差,能夠反應該模型的預測偏差的離散程度,即後續用於未見過的樣本數據時,模型的預測準確性是否穩定。

參考

維基百科 - Bias–variance tradeoff
Bias-Variance in Machine Learning
維基百科 - 方差
維基百科 - 指望值《Pattern Recognition and Machine Learning》之 3.2. The Bias-Variance Decomposition

相關文章
相關標籤/搜索