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

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%
該模型同時具有低偏差和低方差,這個模型就很好,既很好的擬合了訓練集,同時又具有良好的泛化能力。
上面就是從偏差和方差的角度對模型進行分析,有了這個分析,接下來不管是模型改進還是對模型測試,都會有一個方向性的指導。

相關文章