演算法模型定量分析之偏差和方差

feifeihuanming發表於2020-12-09

首先宣告一下,這裡所說的方差、偏差與統計學上的不是一個概念。這裡引入偏差和方差的概念還是為了進行誤差分析。之前我們介紹過一些誤差分析的方法,主要是對誤檢的開發集中的圖片進行屬性分析,找到演算法的薄弱點,這裡介紹另外一種思路。
現在我們對於所有的資料,可以分為三類:訓練集、開發集和測試集。我們之前只介紹了在開發集和測試集上對演算法進行測試,其實還有一種測試就是在訓練集集上對模型進行測試。有些同學這時候可能就納悶了,在訓練集上進行測試有什麼意義?這些素材明明已經訓練過了,為什麼還能拿來測試?
這就來回答一下大家的疑問。前面我們們介紹過,開發集和測試集一般是要服從同分布的,而且要和實際場景的分佈儘可能一致,但是他們和訓練集的分佈不一定是一致的。其實對於
一個演算法模型來說,有兩方面要求:
在和訓練集相同分佈的素材上效果要好(可以簡單理解為訓練集)
在開發集/測試集上效果要好
上面兩點是具有遞進關係的,首先要在訓練集上分類效果好,才有可能在測試集上取得好的效果。
這裡簡單解釋一下”和訓練集相同分佈的素材”怎麼理解。
通常情況下演算法同學會這樣做:將訓練集平均分為N等份,比如說10等份。然後重複如下步驟:
 選擇第1份作為測試集,剩餘9份作為訓練集;
 選擇第2份作為測試集,剩餘9分組為訓練集;
 。。。
 選擇第10份作為測試集,剩餘9份作為訓練集。
以上共訓練了10次,測試了10次,檢測率取平均值。上面這個過程就叫做交叉驗證(Cross-validation)。當然了,分成5份可以。這裡我們可以將每一份的測試集都認為是和訓練集服從同一分佈的。

上面說了這麼多,接下來才是今天的重點:假如說我們設計一個分類器,其在訓練集上的誤檢率為10%,在測試集上的誤檢率是15%,對於測試集上的15%的誤檢率,可以將其分為兩個部分:
 第一部分是演算法在訓練集上的誤檢率,稱其為偏差,本例中是10%,
 第二部分是模型在測試集(或者開發集)上的表現比訓練集上差多少,稱其為方差,在本例中測試集上的表現比訓練集差5%,
我們最終的目的是模型在測試集上能夠得到好的表現,這時候就可以分析模型的瓶頸到底是在偏差還是方差,因為有些策略主要是為了改進偏差,有些策略是為了改進方差,建立起演算法在偏差和方差上的表現,一方面有助於演算法同學選擇有效的改進策略,另一方面,測試同學也可以根據演算法在偏差和方差上的表現,提出針對性的改進建議,同時也能樹立自己的專業性。

知道了方差和偏差,怎麼用它來對模型進行分析呢?接下來通過一個例子示範一下該怎麼做。
假如說我們現在訓練了一個分類器,考慮如下四種情況:
訓練集誤檢率1%
測試集誤檢率10%
根據上面的定義,該分類器偏差為1%,方差為9%。說明這個模型在訓練集上表現很好,但是在測試集上表現比較差,說明模型的泛化能力比較差,即模型在訓練集上過擬合

第二種情況:
訓練集誤檢率10%
測試集誤檢率11%
這種情況下,偏差為10%,方差為1%,偏差高,方差低,說明模型對訓練集的擬合併不好,屬於欠擬合

第三種情況:
訓練集誤檢率10%
測試集誤檢率20%
該模型同時具有高偏差和高方差,它在訓練集上表現很差,同時泛化能力(即測試集上的表現)也很差,它同時即過擬合又欠擬合

第四種情況:
訓練集誤檢率1%
測試集誤檢率2%
該模型同時具有低偏差和低方差,這個模型就很好,既很好的擬合了訓練集,同時又具有良好的泛化能力。
上面就是從偏差和方差的角度對模型進行分析,有了這個分析,接下來不管是模型改進還是對模型測試,都會有一個方向性的指導。

相關文章