1. 程式人生 > >機器學習:方差(variance)和偏差(bias)

機器學習:方差(variance)和偏差(bias)

  • 模型誤差來源

機器學習模型的泛化誤差來自於兩方面:error=viriance+bias

偏差:通過n次取樣,每次取樣m個訓練樣本,訓練模型,這樣可以得到n個模型,每個模型輸出的平均值與真實模型的輸出之間的差值。

方差:通過n次取樣,每次取樣m個訓練樣本,訓練模型,這樣可以得到n個模型,每個模型輸出的方差。

  • 那麼什麼情況下偏差大呢,什麼情況方差大?

假設在1階,3階,5階模型空間上,我們分別訓練了100個模型(n=100),得到的曲線如上圖所示。假設真實模型為:

畫出所有模型的輸出平均值和真實值的對比曲線:

就bias而言,可以看出對於左邊模型較為簡單的一階模型,bias更大,而右邊5階模型的bias則很小

可以得出一個結論:模型越簡單,偏差越大。從模型空間角度出發看,模型越簡單,它能覆蓋的函式空間越小,那麼它能包含真實模型的概率就越小,因此偏差越大。

就variance而言,可以看出越簡單的模型,曲線越集中;越複雜的模型,曲線越分散

可以得出一個結論:模型越簡單,方差越小;模型越複雜,方差越大。從另一個角度看:模型越簡單,它越不受樣本的影響,比如我們都用常數模型f(x)=c擬合,那麼此時偏差為0。

  • variance-bias trade-off

由上面的分析可以看出,隨著model的複雜性上升,由bias帶來的error是不斷減小的;由variance帶來的error是不斷增加的,那麼必然在兩者之間存在一個平衡點,在該點的model效能最好。如下圖所示:

當模型太過簡單(在trade-off點之前),這個時候bias會過於大,造成欠擬合;當模型太過複雜(在trade-off點之後),這個時候variance會過於大,造成過擬合;

  • 如何在實際問題中消除bias和variance

如果是bias很大,說明模型太簡單了,甚至連train data都沒辦法fit很好;這個時候只能從模型角度出發,增加模型的複雜度,或者增加有用的特徵,讓簡單的model就能fit好;

如果是variance很大,模型太過複雜,可以考慮增加資料集(實際中不好操作);或者通過正則化(Regularization)降低模型的複雜度,但這個有可能會是的bias增加。

  • 從另一個角度看overfitting和underfitting

經驗風險:模型在訓練集上的誤差。

overfitting就是不斷最小化經驗風險,只要模型足夠複雜,就可以使得在訓練集上的誤差越來越小。而實際上在隨著模型不斷的複雜,它在測試集上的誤差是先減小後增大的,那麼那個拐點其實就那個trade-off。平衡點表現為訓練誤差不是很大(沒有underfitting),測試集誤差也沒有很大(沒有overfitting)。

underfitting是指模型過於簡單,使得經驗風險(訓練集誤差)過高。

從這個角度上看,我們實際上不僅要最小化經驗風險,還要最小化模型複雜度,這兩者的和其實就是結構風險。

我們可以通過模型選擇來防止overfitting,模型選擇包括正則化和交叉驗證,正則化就是最小化結構風險;交叉驗證就是把訓練集劃分成訓練集和驗證集,並且利用訓練集訓練model,驗證集驗證model,我們會選擇一個在驗證集上表現良好的model,這就防止了過擬合overfiiting訓練集。提高模型的泛化能力(是指在未知資料集上的模型表現)。一般有簡單劃分比例法,5-fold法,留一法(一般是用於資料量少的情況)。