機器學習中的Bias(偏差),Error(誤差),和Variance(方差)有什麼區別和聯繫?

最近在學習機器學習,在學到交叉驗證的時候,有一塊內容特別的讓我困惑,Error可以理解為在測試數據上跑出來的不準確率 ,即為 (1-準確率)

在訓練數據上面,我們可以進行交叉驗證(Cross-Validation)。
一種方法叫做K-fold Cross Validation (K折交叉驗證), K折交叉驗證,初始採樣分割成K個子樣本,一個單獨的子樣本被保留作為驗證模型的數據,其他K-1個樣本用來訓練。交叉驗證重複K次,每個子樣本驗證一次,平均K次的結果或者使用其它結合方式,最終得到一個單一估測。

當K值大的時候, 我們會有更少的Bias(偏差), 更多的Variance。
當K值小的時候, 我們會有更多的Bias(偏差), 更少的Variance。

我十分不理解上述的描述,求大神來解釋到底什麼是Bias, Error,和Variance?
交叉驗證,對於這三個東西到底有什麼影響?


一圖勝千言。

我是這樣抽象理解這個問題的:

  • :bias描述的是根據樣本擬合出的模型的輸出預測結果的期望與樣本真實結果的差距,簡單講,就是在樣本上擬合的好不好。要想在bias上表現好,low bias,就是複雜化模型,增加模型的參數,但這樣容易過擬合 (overfitting),過擬合對應上圖是high varience,點很分散。low bias對應就是點都打在靶心附近,所以瞄的是準的,但手不一定穩。
  • :varience描述的是樣本上訓練出來的模型在測試集上的表現,要想在varience上表現好,low varience,就要簡化模型,減少模型的參數,但這樣容易欠擬合(unfitting),欠擬合對應上圖是high bias,點偏離中心。low varience對應就是點都打的很集中,但不一定是靶心附近,手很穩,但是瞄的不準。

所以bias和variance的選擇是一個tradeoff,過高的varience對應的概念,有點『劍走偏鋒』『矯枉過正』的意思,如果說一個人varience比較高,可以理解為,這個人性格比較極端偏執,眼光比較狹窄,沒有大局觀。而過高的bias對應的概念,有點像『面面俱到』『大巧若拙』的意思,如果說一個人bias比較高,可以理解為,這個人是個好好先生,誰都不得罪,圓滑世故,說話的時候,什麼都說了,但又好像什麼都沒說,眼光比較長遠,有大局觀。(感覺好分裂 )

註:關於這個偏執和好好先生的表述,不是非常嚴謹,對這兩個詞的不同理解會導致截然相反的推理,如果你看完這段覺得有點困惑,可以去看評論區的討論,不得不感嘆一下,在準確描述世界運行的規律這件事上,數學比文學要準確且無歧義的多。

在林軒田的課中,對bias和variance還有這樣一種解釋,我試著不用數學公式抽象的簡單概括一下:

我們訓練一個模型的最終目的,是為了讓這個模型在測試數據上擬合效果好,也就是Error(test)比較小,但在實際問題中,test data我們是拿不到的,也根本不知道test data的內在規律(如果知道了,還machine learning個啥 ),所以我們通過什麼策略來減小Error(test)呢?

分兩步:

  1. 讓Error(train)儘可能小
  2. 讓Error(train)儘可能等於Error(test)

三段論,因為A小,而且A=B,這樣B就小。

那麼怎麼讓Error(train)儘可能小呢?——》把模型複雜化,把參數搞得多多的,這個好理解,十元線性回歸,肯定error要比二元線性回歸低啊。——》low bias
然後怎麼讓Error(train)儘可能等於Error(test)呢?——》把模型簡單化,把參數搞得少少的。什麼叫Error(train)=Error(test)?就是模型沒有偏見,對train test一視同仁。那麼怎樣的模型更容易有這這種一視同仁的特性,換句話說,更有『通用性』,對局部數據不敏感?那就是簡單的模型。——》low varience


首先 Error = Bias + Variance
Error反映的是整個模型的準確度,Bias反映的是模型在樣本上的輸出與真實值之間的誤差,即模型本身的精準度,Variance反映的是模型每一次輸出結果與模型輸出期望之間的誤差,即模型的穩定性。

舉一個例子,一次打靶實驗,目標是為了打到10環,但是實際上只打到了7環,那麼這裡面的Error就是3。具體分析打到7環的原因,可能有兩方面:一是瞄準出了問題,比如實際上射擊瞄準的是9環而不是10環;二是槍本身的穩定性有問題,雖然瞄準的是9環,但是只打到了7環。那麼在上面一次射擊實驗中,Bias就是1,反應的是模型期望與真實目標的差距,而在這次試驗中,由於Variance所帶來的誤差就是2,即雖然瞄準的是9環,但由於本身模型缺乏穩定性,造成了實際結果與模型期望之間的差距。

在一個實際系統中,Bias與Variance往往是不能兼得的。如果要降低模型的Bias,就一定程度上會提高模型的Variance,反之亦然。造成這種現象的根本原因是,我們總是希望試圖用有限訓練樣本去估計無限的真實數據。當我們更加相信這些數據的真實性,而忽視對模型的先驗知識,就會盡量保證模型在訓練樣本上的準確度,這樣可以減少模型的Bias。但是,這樣學習到的模型,很可能會失去一定的泛化能力,從而造成過擬合,降低模型在真實數據上的表現,增加模型的不確定性。相反,如果更加相信我們對於模型的先驗知識,在學習模型的過程中對模型增加更多的限制,就可以降低模型的variance,提高模型的穩定性,但也會使模型的Bias增大。Bias與Variance兩者之間的trade-off是機器學習的基本主題之一,機會可以在各種機器模型中發現它的影子。

具體到K-fold Cross Validation的場景,其實是很好的理解的。首先看Variance的變化,還是舉打靶的例子。假設我把搶瞄準在10環,雖然每一次射擊都有偏差,但是這個偏差的方向是隨機的,也就是有可能向上,也有可能向下。那麼試驗次數越多,應該上下的次數越接近,那麼我們把所有射擊的目標取一個平均值,也應該離中心更加接近。更加微觀的分析,模型的預測值與期望產生較大偏差,在模型固定的情況下,原因還是出在數據上,比如說產生了某一些異常點。在最極端情況下,我們假設只有一個點是異常的,如果只訓練一個模型,那麼這個點會對整個模型帶來影響,使得學習出的模型具有很大的variance。但是如果採用k-fold Cross Validation進行訓練,只有1個模型會受到這個異常數據的影響,而其餘k-1個模型都是正常的。在平均之後,這個異常數據的影響就大大減少了。相比之下,模型的bias是可以直接建模的,只需要保證模型在訓練樣本上訓練誤差最小就可以保證bias比較小,而要達到這個目的,就必須是用所有數據一起訓練,才能達到模型的最優解。因此,k-fold Cross Validation的目標函數破壞了前面的情形,所以模型的Bias必然要會增大。


首先明確一點,Bias和Variance是針對Generalization(一般化,泛化)來說的。

在機器學習中,我們用訓練數據集去訓練(學習)一個model(模型),通常的做法是定義一個Loss function(誤差函數),通過將這個Loss(或者叫error)的最小化過程,來提高模型的性能(performance)。然而我們學習一個模型的目的是為了解決實際的問題(或者說是訓練數據集這個領域(field)中的一般化問題),單純地將訓練數據集的loss最小化,並不能保證在解決更一般的問題時模型仍然是最優,甚至不能保證模型是可用的。這個訓練數據集的loss與一般化的數據集的loss之間的差異就叫做generalization error。

generalization error又可以細分為Bias和Variance兩個部分。
首先如果我們能夠獲得所有可能的數據集合,並在這個數據集合上將loss最小化,這樣學習到的模型就可以稱之為「真實模型」,當然,我們是無論如何都不能獲得並訓練所有可能的數據的,所以「真實模型」肯定存在,但無法獲得,我們的最終目標就是去學習一個模型使其更加接近這個真實模型。

而bias和variance分別從兩個方面來描述了我們學習到的模型與真實模型之間的差距。
Bias是 「用所有可能的訓練數據集訓練出的所有模型的輸出的平均值」 與 「真實模型」的輸出值之間的差異;
Variance則是「不同的訓練數據集訓練出的模型」的輸出值之間的差異。

這裡需要注意的是我們能夠用來學習的訓練數據集只是全部數據中的一個子集。想像一下我們現在收集幾組不同的數據,因為每一組數據的不同,我們學習到模型的最小loss值也會有所不同,當然,它們與「真實模型」的最小loss也是不一樣的。

其他答主有提到關於cross validation中k值對bias和variance的影響,那我就從其他方面來舉個例子。

假設我們現在有一組訓練數據,需要訓練一個模型(基於梯度的學習,不包括最近鄰等方法)。在訓練過程的最初,bias很大,因為我們的模型還沒有來得及開始學習,也就是與「真實模型」差距很大。然而此時variance卻很小,因為訓練數據集(training data)還沒有來得及對模型產生影響,所以此時將模型應用於「不同的」訓練數據集也不會有太大差異。

而隨著訓練過程的進行,bias變小了,因為我們的模型變得「聰明」了,懂得了更多關於「真實模型」的信息,輸出值與真實值之間更加接近了。但是如果我們訓練得時間太久了,variance就會變得很大,因為我們除了學習到關於真實模型的信息,還學到了許多具體的,只針對我們使用的訓練集(真實數據的子集)的信息。而不同的可能訓練數據集(真實數據的子集)之間的某些特徵和雜訊是不一致的,這就導致了我們的模型在很多其他的數據集上就無法獲得很好的效果,也就是所謂的overfitting(過學習)。

因此,在實際的訓練過程中會用到validation set,會用到諸如early stopping以及regularization等方法來避免過學習的發生,然而沒有一種固定的策略方法適用於所有的task和data,所以bias和variance之間的tradeoff應該是機器學習永恆的主題吧。

最後說一點,從bias和variance的討論中也可以看到data對於模型訓練的重要性,假如我們擁有全部可能的數據,就不需要所謂的tradeoff了。但是既然這是不現實的,那麼盡量獲取和使用合適的數據就很重要了。


更準確地講ERROR分成3個部分:
Error = Bias + Variance + Noise


機器學習講演算法之前,需要先弄懂很多概念,這些概念很多是來自統計學的,這也是為什麼傳統的機器學習叫做基於統計的機器學習。對這些概念的理解一定要牢,否則就像技術債,它一定會回來咬你讓你付出更大的代價。這也是為什麼在我們優達學城(Udacity)平台上的機器學習課程中,第一部分不是講建模,而是先講模型的評估和驗證。(更多關於機器學習相關視頻與課程可以查看這裡:機器學習工程師(中/英))

這些概念維基都可以查到,但是沒什麼用,不如舉個例子。

你提到了**準確率Accuracy**:

這也是最基本和最常見的分類指標。準確率是被描述為在特定類的所有項中正確分類或標記的項的數量。舉例而言,如果教室里有 15 個男孩和 16 個女孩,人臉識別軟體能否正確識別所有男孩和所有女孩?如果此軟體能識別 10 個男孩和 8 個女孩,則它的識別準確率就是 60%:

準確率 = 正確識別的實例的數量/所有實例數量

但與人們直覺相反的是,準確率在有些時候並不能說明問題。我們拿京東最近反腐敗做例子,假設京東有10000名員工,其中有10個是腐敗分子,另外9990是吃瓜群眾。某個演算法在這10000人中只正確的識別出了1個腐敗分子,請問演算法的正確率是多少?

中國還有一句老話,叫做寧可錯殺一千不可放過一個。意思是寧可誤判多一點,也不能把真的漏掉。例如某種癌症篩查,第一步檢查儘可能把所有有跡象的都挑出來,讓他們去做進一步檢查去排除,也不要在第一步就忽略,讓患者直接回家。相反,如果你的演算法用作犯罪堅定,判定之後就直接死刑執行了,這時可千萬不能冤枉任何一個好人。

你提到了Error,我們都不想讓模型預測有太多的error,那樣就失去了機器學習的意義。但你要知道這些error是怎麼來的。

在模型預測中,模型可能出現的誤差來自兩個主要來源,即:因模型無法表示基本數據的複雜度而造成的偏差(bias),或者因模型對訓練它所用的有限數據過度敏感而造成的方差(variance)。我們會對兩者進行更詳細的探討。

1. 偏差(bias)造成的誤差(error) - 準確率和欠擬合

如前所述,如果模型具有足夠的數據,但因不夠複雜而無法捕捉基本關係,則會出現偏差。這樣一來,模型一直會系統地錯誤表示數據,從而導致預測準確率降低。這種現象叫做欠擬合(underfitting)。

簡單來說,如果模型不適當,就會出現偏差。舉個例子:如果對象是按顏色和形狀分類的,但模型只能按顏色來區分對象和將對象分類(模型過度簡化),因而一直會錯誤地分類對象。

或者,我們可能有本質上是多項式的連續數據,但模型只能表示線性關係。在此情況下,我們向模型提供多少數據並不重要,因為模型根本無法表示其中的基本關係,我們需要更複雜的模型。那是不是擬合程度越高越好呢?也不是,因為還會有方差。

2. 方差(variance)造成的誤差 - 精準度和過擬合

方差就是指模型過於貼近訓練數據,以至於沒辦法把它的結果泛化(generalize)。而泛化是正事機器學習要解決的問題,如果一個模型只能對一組特定的數據有效,換了數據就無效了,我們就說這個模型過擬合。

上面的說法還是太抽象,我們換個比喻。一個學生,根本沒學會加減法,你給他再多的題,他也還是不會。訓練量的增加對他沒有幫助。還有一個學生記憶力特別好,你發現他做練習還不錯,但是一到考試就掛。你仔細觀察發現,其實他沒有學會加減法,而是在做練習的時候偷看答案,他所知道的1+1=2是背下來的,練習中如果沒有4-3,你考他它就不會了。

上圖中,你能看出來哪個模型偏差(bias)大,哪個模型方差(variance)大,哪個模型是這裡面的最優選擇嗎?

上圖是隨著模型複雜度增加訓練集和驗證集的分數。如果你覺得模型的最佳的複雜度應該是幾?

寫到這裡只是解答了你問題的一半,因為你對交叉驗證(Cross-Validation)的理解也存在不少誤區,有機會我把交叉驗證也徹底講講清楚。


上面回答已經把Bias - Variance trade-off解釋地很清楚了,但是我覺得大家對cross-validation里的交叉驗證子集的個數K與bias及variance關係的解釋不正確。cross-validation裡面說的Bias與Variance並不是指預測模型的bias-variance tradeoff,得分兩部分來回答。

預測模型中,一般會把樣本分為訓練集和測試集。一個預測模型的誤差是指真實值與預測值之間距離的度量,我們關心的是訓練集t訓練出來的模型,其測試誤差(預測誤差)是多少。雖然測試誤差隨測試集的不同而變化,我們能夠找到它的期望與bias以及variance之間的聯繫。正如上面回答都提到了的,如果使用平方誤差函數:
E(Y - hat{f})^2 = sigma ^2 + E(f - Ehat{f})^2  +E(hat{f} - Ehat{f})^2
其中,Y是真實值,Y 由 Y = f + e產生, f-hat是預測值 。
等式右邊依次是Irreducible Error, Bias^2 和Variance。
可以看出來,EPE(期望預測誤差)是由隨機誤差,預測模型與真實模型的誤差以及預測模型本身的變異三部分組成的。

上述內容並沒涉及到模型選擇的問題,我們用訓練集訓練出來一個預測模型,就拿到測試集去計算預測誤差。如果我們有一系列模型需要選擇的話,當然不能用測試集去做選擇,因為這相當提前偷看了測試集的數據,得到的測試誤差r會低估真實的預測誤差。
所以我們需要在測試集以外,另外尋找一個統計量作為預測誤差的估計值,以這個統計量來作為模型選擇的標準。這樣有的統計量有基於Optimism的Cp, AIC
,基於貝葉斯方法的BIC,還有Vapnik-Chervonenkis維度, 驗證誤差等. 其中驗證誤差需要另外找一個獨立的驗證集,因此在樣本量不足,分割出一個驗證集並不現實的情況,我們就有了Cross Validation的方法。

對於一系列模型F(hat{f},  	heta), 我們使用Cross Validation的目的是獲得預測誤差的無偏估計量CV從而可以用來選擇一個最優的Theta*,使得CV最小。假設K-folds cross validation,CV統計量定義為每個子集中誤差的平均值,而K的大小和CV平均值的bias和variance是有關的:
CV = frac{1}{K} sum_{k = 1}^{K}{frac{1}{m}sum_{i = 1}^{m}(hat{f^k} - y_i)^2}
其中,m = N/K 代表每個subset的大小, N是總的訓練樣本量,K是subsets的數目。

當K較大時,m較小,模型建立在較大的N-m上,因此CV與Testing Error的差距較小,所以說CV對Testing Error估計的Bias較小。同時每個Subsets重合的部分較大,相關性較高,如果在大量不同樣本中進行模擬,CV統計量本身的變異較大,所以說Variance高。反之亦然。

(圖中藍色的線是10-folds Cross validation的CV統計量,放這個圖不是為了討論subset Size與bias的關係,而是想說,圖中綠色的點和置信區間是Cross validation里的bias和variance,是針對Prediction Error估計的)

所以,Cross Validation是為了得到預測誤差的估計值,bias是CV統計量的期望與預測誤差的距離,variance是CV統計量自己的方差。這和模型泛化誤差的分解是兩回事。最後用嶺回歸模型舉個簡單例子,如果K=2,K=10,K=N最終都選擇了相同的lambda,那麼訓練出來的模型beta = Inverse(X』X + lambda*I)X"Y也都一樣,那麼模型的實際testing error,bias,variance也全都一樣了。然而在模型選擇時,不同K所對應的CV統計量的期望和方差是存在變化關係的。


在《機器學習》(周志華)一書中,對這個問題有詳細的討論。我搬運其中的兩段。

泛化誤差可分解為偏差、方差與雜訊之和。

偏差度量了學習演算法的期望預測與真實結果的偏離程度,即刻畫了學習演算法本身的擬合能力方差度量了同樣大小的訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所造成的影響雜訊則表達了在當前任務上任何學習演算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度

偏差-方差分解說明,泛化性能是由學習演算法的能力、數據的充分性以及學習任務本身的難度所共同決定的。給定學習任務,為了取得好的泛化性能,則需使偏差較小,既能夠充分擬合數據,並且使方差較小,即使得數據擾動產生的影響小

周志華《機器學習》

有幫助請點贊:)


@大象 等大神已經講的很有深度了。來個無公式版的儘可能直白地解釋一下我理解的思路哈。
首先要明確,我們的終極目標是找出變數間真正的關係,估計出所謂的「真實模型」,然而由於我們無法獲得所有的數據,實際情況下我們能做到的只有儘可能地建立一個具有可推廣與普適性的模型,用專業術語叫具有良好的泛化能力(generalization ability,意思就是一般化)。技術層面上講,實現的方法是將數據集分為訓練(學習)集training set與測試集testing set,由training set擬合模型,力爭這樣得到的誤差與testing set的誤差差不多的。

那麼怎麼衡量這個誤差呢?統計學習中用預測值與真實值之差的平方的期望來衡量總的誤差,不難證明,這一誤差可以分解成bias(偏差,平均預測值與真實值之差)的平方加上variance(方差,預測值與平均預測值之差的平方的期望,反映預測的偏離與波動程度)。所謂的bias-variance trade-off指的是當模型較為複雜時,雖然你預測的更准了(bias小了),但可能只是在你的training set上預測的准,實際上你可能把training set上的雜訊信息也包括進來了,統計叫過度擬合(overfit)。這就導致預測的結果隨數據集的變化波動很大,很不穩定(variance大了)。我認為這兩個你大我小你小我大的權衡實際上就是在過擬合與欠擬合之間的平衡

那麼如何儘可能避免過擬合呢?人們提出了答主所問的cross-validation,它把training set拿一部分出來驗證,k-fold validation的目的就是通過對k次validation的誤差求平均、觀察它們的波動,來盡量避免對某個特定數據集的驗證導致的過度擬合。專業術語來說,我們的目標是用CV得到的error來估計testing set的error,而我們希望這一估計比較准、波動小,也就是具有較小的bias(此處反映平均估計誤差與真實誤差的偏離)與variance(此處反映估計誤差與真實誤差的波動程度),使得該估計很準確而且很穩定。而由上文的trade-off的分析可知,這麼美的事情是幾乎不可能同時發生的~

理解到了這裡,答主的問題應該不難解決了。試想一下,當K很大的時候,多次的驗證要求擬合得到的模型更為複雜,正如前文提到,我們對整個training set的擬合程度很高,即估計test error的bias很小,但是與此同時,我們平均了很多個數據集的誤差,也包括了更多的雜訊,因此導致了估計test error的variance更大。反之同理。

錯誤和不足之處歡迎指點批評。歡迎討論與交流。


像上面提到的Error就像一樓說的 = Bias + Variance
Bias是設計造成的,就是你無法完美地隨機抽樣
Variance是執行造成的,就是你的抽樣無法沒完美執行(因為各種成本人力因素)


給定一個數據集	au ,有唯一的真實模型f,但我們不知道。我們用不同的估計模型hat f去逼近f,得到的均方誤差MSE是不一樣的(其他誤差的推導要複雜許多),可以把這個MSE和hat f都看作給定數據集	au 下的隨機變數。
MSE_	au =E_{hat f|	au }[(f-hat f)^2]=E_{hat f|	au }[f^2-2f hat f+hat f^2]=f^2-2f E_{hat f|	au }[hat f]+E_{hat f|	au }[hat f^2] (對於數據集	au 來說,真實模型f是確定的,所以對它求條件期望還是它自己)
=f^2-2f E_{hat f|	au }[hat f]+(E^2_{hat f|	au }[hat f]-E^2_{hat f|	au }[hat f])+E_{hat f|	au }[hat f^2] (湊完全平方項)
=(f^2-2f E_{hat f|	au }[hat f]+E^2_{hat f|	au }[hat f])+(E_{hat f|	au }[hat f^2]-E^2_{hat f|	au }[hat f])(加號左邊是完全平方項,右邊恰好是方差公式DX=EX^2-E^2X
=(f- E_{hat f|	au }[hat f])^2+Var_{hat f|	au }[hat f]=(f- E[hat f])^2+Var[hat f] (其中(f- E[hat f])^2即真實模型和估計模型的偏差bias的平方)

數據集中真實模型和估計模型的MSE被分解為兩項,第一項就是模型偏差的平方bias^2,第二項就是估計模型的方差。

針對題主下面這個問題

當K值大的時候, 我們會有更少的Bias(偏差), 更多的Variance。
當K值小的時候, 我們會有更多的Bias(偏差), 更少的Variance。

為什麼K-fold Cross Validation中的k值會影響偏差和方差呢?

這個很好解釋,還是給定數據集	au ,K折交叉驗證重複k次地把	au 分成訓練集和測試集,K值越大,每次劃分的訓練集就越大,估計模型的期望E_{hat f|	au}[hat f]就越接近整個數據集的真實模型f,因此模型偏差就越小。


以前總結過一些,以最淺顯的語言表達了,希望能幫助你http://blog.csdn.net/MrLevo520/article/details/53128297


Bias衡量的是訓練後的模型整體上相對於目標函數的偏差。可以理解為訓練會得到f_1,f_2,cdots, Bias表示的是這些f對於目標函數f^*的平均的偏移。
Variance衡量的是訓練後的模型自身的分布。Variance表示f_1,f_2,cdots構成的集合能夠覆蓋多大的空間。可以理解為一種泛化能力。

出自http://www.youtube.com/watch?v=JfkbyODyujw


Error:泛化誤差,是誤差、方差、雜訊之和

Bias:誤差,對象是單個模型,期望輸出與真實標記的差別

Variance:方差,對象是多個模型

從同一個數據集中,用科學的採樣方法得到幾個不同的子訓練集,用這些訓練集訓練得到的模型往往並不相同。

以上圖為例:
1. 左上的模型偏差最大,右下的模型偏差最小;
2. 左上的模型方差最小,右下的模型方差最大

為了理解第二點,可以看下圖。藍色和綠色分別是同一個訓練集上採樣得到的兩個訓練子集,由於採取了複雜的演算法去擬合,兩個模型差異很大。如果是拿直線擬合的話,顯然差異不會這麼大。

一般來說,偏差、方差和模型的複雜度之間的關係是這樣子滴:

實際中,我們需要找到偏差和方差都較小的點。

XGBOOST中,我們選擇儘可能多的樹,儘可能深的層,來減少模型的偏差;
通過cross-validation,通過在驗證集上校驗,通過正則化,來減少模型的方差

從而獲得較低的泛化誤差。


對數據感興趣的小夥伴,歡迎交流,微信公共號:一白侃數


Bias

  • 衡量模型擬合訓練數據的能力(訓練數據不一定是整個 training dataset,而是只用於訓練它的那一部分數據,例如:mini-batch)。
  • bias 越小,擬合能力越高(可能產生overfitting);反之,擬合能力越低(可能產生underfitting)。
  • 注意,bias是針對一個模型來說的,這一點與variance不同。

這點還是比較好理解的,bias 翻譯成偏差,從字面意思也可以看出是和某個值的偏離程度,而這個某個值在機器學習演算法中就是整個數據的期望值。

Variance

  • 衡量模型的 generalization 的能力。
  • variance 越小,模型的 generalization 的能力越高;反之,模型的 generalization 的能力越低。
  • 它是針對多個模型來說的,針對多個模型來說是什麼意思?看下面的分析。

在訓練模型的時候不是一下子在整個 training dataset 上進行訓練,而是採用從 training dataset 中 sample 數據點的方式來進行訓練(例如:mini-batch)。

因為都是從同一個數據集 sample 數據點,所以 sample 的數據點可以保證都是同分布的。但是也正因為 sample 的數據點的不同,很可能會生成不同的模型。

舉例來說,假設這裡進行了4次 sample 數據點,並在得到的 mini-batch 的數據集上進行演算法的訓練,得到的模型如下圖所示。

那麼你認為這樣的結果好嗎?肯定是不好的啊,因為演算法每次學習到的模型都不一樣,這說明演算法無法學習到數據的 distribution 規律,那還怎麼來進行預測?

我們期望的結果是:每次不管怎麼 sample 數據點,演算法學習到的模型都不會變化太大(比如:都是直線,或者都是二次曲線)。這樣的話說明演算法能很好的學習到數據的 distribution 規律,那麼如果來了新的數據(同分布),演算法學習到的模型就能夠很好的進行 predict(說明模型的 generalization 能力好)。

而 variance 就是衡量每次在不同 mini-batch 數據上訓練生成的不同模型之間的差異性大小的度量值。

variance 越小,說明在不同 mini-batch 訓練數據上生成的模型的差異性小 ----&> 演算法學習到的模型能夠很好的對新的數據(同分布)進行 predict(演算法能很好的學習到了數據的 distribution 規律) ----&> 說明模型的 generalization 能力好;反之,模型的 generalization 的能力越低。

現在再看就知道為什麼 variance 是針對多個(不同)模型說的了,它與 bias 的區別也很明顯的可以看到了。

Bias vs Variance 的關係可以看下圖

注意:模型的 capacity 最優點不是bias和variance的相交點。至於bias、variance和 cross-validation 的聯繫上還沒想明白,想明白後回來補充。


Bibliography: https://web.archive.org/web/20140821063842/http://ttic.uchicago.edu/~gregory/courses/wis-ml2012/lectures/biasVarDecom.pdf
受這篇參考的啟發,說說我的理解,為什麼會出現這個公式?本來很簡單平方誤差和為什麼非要拆解成這「莫名其妙」的三項之和?
但凡是機器學習入門或了解統計機器學習人(這裡我們暫且考慮參數模型),都知道機器學習的究極目標是找出feature: x和label: y之間的函數對應關係,即y = f(x),當然從統計學習的角度出發就是找出x, y的聯合概率分布p(x, y),從而達到「預測」的目的。
假如x、y都只是1維標量,完全可以用可視化的方式,人可以一眼看出散點圖的大致規律,比如對稱、周期等規律。但是,在維度很高的情況呢我們又該怎麼做呢?
一般做法是對數據做出假設(呵呵,你沒聽錯),這裡我們考慮最簡單的線性模型,即x和y滿足線性關係:y=	heta^Tx。接下來,根據提供的數據(也就是訓練集)可以直接算出參數	heta的解析解。那麼,到此結束了嗎?NO!
(1)數據本身不是可靠的!就拿y來說,由於測量誤差、系統誤差的存在,其值未必是真實值,但不用擔心,一般來說,y和真實值f之間滿足這個關係y=f+epsilon,這裡f是真實值,epsilon是白雜訊,這裡我們不妨假設epsilonsimmathcal N(0, sigma^2)
(2)訓練數據未必體現了整個數據的全貌!假如f是正弦分布,而訓練集只給了跟它相交的直線的交點,那我們的模型雖然對訓練集來說誤差很低,但是在測試集上就會有很大偏差。
基於以上兩點,我們有必要分析誤差到底由哪幾部分組成的,對於測試集中的點(x_0, y_0),從訓練集X中學到的函數記為hat f_X,以MSE(平均平方誤差)為評價度量分析其誤差構成:
下面是我自己推導的截圖,我覺得是目前看到所有關於bias vs. Variance文獻中最準確的推導,需要注意的是期望值針對不同的訓練數據集X!

至此,誤差的構成已經很明顯了,分別是:
1. 不可約掉label中的系統誤差的方差sigma^2
2. Bias^2,這裡bias定義為在x_0處的預測值和不同預測模型在x_0處預測的均值的差;
3. 不同預測模型在x_0處預測的方差。
通俗地講(因為我不知道如何用數學形式證明),簡單的模型參數變化相對較小,因此方差小,但是跟真實值之間的誤差較大;複雜模型參數對訓練數據集較敏感,方差大,但均值跟真實值之間誤差較小。
解釋或推導有錯還請指出。


偏差和方差有什麼區別? - Jason Gu 的回答
Error就像一樓說的 = Bias + Variance


統計學裡的mean square error of an estimator是這麼定義的


Error就像一樓說的 = Bias + Variance
通常而言,機器學習會選一個函數空間,這個函數空間可能並不包含最優的函數,這樣即使學習出來這個函數空間中損失函數最小的那個也會和真正最優的函數存在差別,這個差別就是Bias。此外,由於我們並不知道訓練數據的聯合分布p(x,y),當然,知道了就不用學了,可以直接推導出p(y|x)了。所以我們在學習的時候往往是從存在但未知的p(x,y)中隨機出訓練數據集,因為訓練數據集不能無限,這樣訓練數據的分布和真實的p(x,y)也存在不一致,所以在原來的Bias的基礎上又增加了Variance。

以上就是誤差的兩個來源了。

例如我們要做數據擬合,這裡我們假設真實的數據是指數分布,但是我們不知道,所以我們選擇使用線性函數去擬合數據,這樣函數空間中的模型只有線性模型,和真實的指數分布有差距,選擇線性空間的時候帶入了Bias。另外,我們只能通過有限的觀測點去學習線性模型的參數,有限的觀測點來自總體分布的抽樣,並不是完全符合總體數據的p(x,y)分布,這就是Variance的來源了。

為了更形象的說明,我們可以這麼理解:假設我們要測量一個物體的長度,我們會選一把尺子去測量,這把尺子可能不是百分之百的準確,選擇尺子不同會帶來Bias。然後我們用尺子測的時候人去估計又會帶來誤差,這就是所謂的Variance了。

=========5月8日更新=======
下面解釋一下Bias、Variance和k-fold的關係:k-fold交叉驗證常用來確定不同類型的模型(線性、指數等)哪一種更好,為了減少數據劃分對模型評價的影響,最終選出來的模型類型(線性、指數等)是k次建模的誤差平均值最小的模型。當k較大時,經過更多次數的平均可以學習得到更符合真實數據分布的模型,Bias就小了,但是這樣一來模型就更加擬合訓練數據集,再去測試集上預測的時候預測誤差的期望值就變大了,從而Variance就大了;反之,k較小時模型不會過度擬合訓練數據,從而Bias較大,但是正因為沒有過度擬合訓練數據,Variance也較小。

但是:Variance的較大還是較小都是相對於Bias來說的,k較大的時候Bias是相對於Variance比較小;k較小的時候Variance是相對於Bias較小。k較小的時候的Vraince還是要大於k較大的時候的Variance的。

不知道這樣解釋你能否理解?


訓練誤差大,測試誤差小 → Bias大

訓練誤差小,測試誤差大→ Variance大 → 降VC維

訓練誤差大,測試誤差大→ 升VC維


  • Bias
    Error
    : bias error是指模型預測值與真實值差異的平均值。假如有m個樣本,1每次隨機去n個(n &<&< m),用n個樣本訓練出一個模型。然後對(x,y)進行預測得到一個預測值y(1);重複1操作,然後對(x,y)進行預測得到y(2).Error due to Bias = (y(1) – y + y(2) – y, 然後求平均)。
  • Variance
    Error
    : Variance Error是指每次預測的方差,反應模型預測的波動情況。
  • Bias
    Error
    和Variance Error的區別 :Bias Error是個平均值,反應預測情況與真實情況的差異;Variance Error是個方差,反應預測的波動情況。

推薦閱讀:

如何迅速成長成為一名數據分析師?
如何在業餘時學數據分析?
用於數據挖掘的分類演算法有哪些,各有何優劣?

TAG:人工智慧 | 數據挖掘 | 機器學習 | 統計 | 統計學習 |