Bias(偏差),Error(誤差),和Variance(方差)的區別和聯系


准:

bias描述的是根據樣本擬合出的模型的輸出預測結果的期望與樣本真實結果的差距,簡單講,就是在樣本上擬合的好不好。要想在bias上表現好,low bias,就得復雜化模型,增加模型的參數,但這樣容易過擬合 (overfitting),過擬合對應上圖是high variance,點很分散。low bias對應就是點都打在靶心附近,所以瞄的是准的,但手不一定穩。

確:

varience描述的是樣本上訓練出來的模型在測試集上的表現,要想在variance上表現好,low varience,就要簡化模型,減少模型的參數,但這樣容易欠擬合(unfitting),欠擬合對應上圖是high bias,點偏離中心。low variance對應就是點都打的很集中,但不一定是靶心附近,手很穩,但是瞄的不准。

這個靶子上的點(hits)可以理解成一個一個的擬合模型,如果許多個擬合模型都聚集在一堆,位置比較偏,如圖中 high bias low variance 這種情景,意味着無論什么樣子的數據灌進來,擬合的模型都差不多,這個模型過於簡陋了,參數太少了,復雜度太低了,這就是欠擬合;但如果是圖中 low bias high variance 這種情景,你看,所有擬合模型都圍繞中間那個 correct target 均勻分布,但又不夠集中,很散,這就意味着,灌進來的數據一有風吹草動,擬合模型就跟着劇烈變化,這說明這個擬合模型過於復雜了,不具有普適性,就是過擬合。

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

 

作者:知乎用戶
鏈接:https://www.zhihu.com/question/27068705/answer/82132134
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

首先明確一點,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了。但是既然這是不現實的,那么盡量獲取和使用合適的數據就很重要了。
 

作者:orangeprince
鏈接:https://www.zhihu.com/question/27068705/answer/35151681
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

Error = Bias + Variance + Noise
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必然要會增大。

為什么要用交叉驗證(Cross-Validation)

1.交叉驗證,這是僅使用訓練集衡量模型性能的一個方便技術,不用建模最后才使用測試集

2.Cross-validation 是為了有效的估測 generalization error(泛化誤差) 所設計的實驗方法,而generalization error=bias+variance

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



作者:mrlevo520
鏈接:https://www.jianshu.com/p/8d01ac406b40
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。

可以發現,怎么來平衡Bias和Variance則成了我們最大的任務了,也就是怎么合理的評估自己模型呢?我們由此提出了交叉驗證的思想,以K-fold Cross Validation(記為K-CV)為例,基本思想如下:(其他更多方法請看@bigdataage --交叉驗證(Cross-Validation))

 
這里寫圖片描述

將原始數據分成K組(一般是均分),將每個子集數據分別做一次驗證集,其余的K-1組子集數據作為訓練集,這樣會得到K個模型,用這K個模型最終的驗證集的分類准確率的平均數作為此K-CV下分類器的性能指標.K一般大於等於2,實際操作時一般從3開始取,只有在原始數據集合數據量小的時候才會嘗試取2. 而K-CV 的實驗共需要建立 k 個models,並計算 k 次 test sets 的平均辨識率。在實作上,k 要夠大才能使各回合中的 訓練樣本數夠多,一般而言 k=10 (作為一個經驗參數)算是相當足夠了。

看不清上面的就來一幅更簡單的

 
這里寫圖片描述

每次的training_set 紅色, validation_set白色 ,也就是說k=5的情況了

注意:交叉驗證使用的僅僅是訓練集!!根本沒測試集什么事!很多博客都在誤導!

這也就解決了上面剛開始說的Variance(不同訓練集產生的差異),Bias(所有data訓練結果的平均值)這兩大問題了!因為交叉驗證思想集合了這兩大痛點,能夠更好的評估模型好壞!

說白了,就是你需要用下交叉驗證去試下你的算法是否精度夠好,夠穩定!你不能說你在某個數據集上表現好就可以,你做的模型是要放在整個數據集上來看的!畢竟泛化能力才是機器學習解決的核心

Bias、Variance和K-fold的關系

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

作者:TANGent
鏈接:https://www.zhihu.com/question/27068705/answer/35286205
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。



作者:mrlevo520
鏈接:https://www.jianshu.com/p/8d01ac406b40
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM