什麼是泛化誤差?它和訓練誤差的區別?

首先評判一個machine是否good的方法是其泛化能力,泛化能力可以由泛化誤差來體現。

那麼泛化誤差是什麼?

我們已經很熟悉的訓練誤差, 其公式是 E_T(w) = sum_{i=1}^n(hat{f}(x_i|w)-y_i)^2= sum_{xin D}(hat{f}(x|w)-f(x))^2 ,其中 hat{f}(x|w) 是預測值, f(x) 則是目標值,而 D = {(x_i,y_i = f(x_i))}_{i=1}^N 集合D是表示一個全集 chi 的一個樣本量為N的子集。

泛化誤差的公式 E_G(w) = sum_{xinchi}p(x)(hat{f}(x|w)-f(x))^2p(x) 表示的是在全集 chi 中x出現的概率(此處的x可以是一個數據點也可以是一個數據點集合)。

是不是可以觀察到他們的不同了?

訓練誤差計算了訓練集的誤差,而泛化誤差是計算全集的誤差。相比泛化誤差來說,訓練誤差可以說只是計算了一部分的誤差。舉個例子。假設我們現在需要計算某個模型。假設在整個世界中,所有的數據有150個,如下圖。

數據全集

然而現實情況是,我們不可能能夠找到所有的數據,因此假設我們能夠觀測到其中一部分的數據。並且,由於不同的實驗條件,每次實驗都有可能取到其中不同的部分。

下圖為進行多次實驗的結果,(假設實驗次數為2,每次僅能夠找到50個數據)。

數據集1

數據集2

兩次的訓練誤差為 E_i = sum_{xin D_i}(hat{f}(x|w)-f(x))^2 , 而泛化誤差則為 E_G = frac{50}{100}E_1 + frac{50}{100}E_2 ,計算概率的時候都是針對可觀測量,因為不可觀察量我們是無法計算的。

驗證集的加入

上面的兩個數據集可以被視為平時訓練模型時的訓練集training set和測試集test set,當然測試集往往不在建模型者手中,測試集往往用驗證集validation set代替。泛化誤差在這裡可以看作是訓練集誤差和驗證集誤差的加權和。

這也是為什麼使用泛化誤差來衡量模型比使用訓練誤差來衡量更有科學性。顯而易見過分追求低訓練誤差會使得模型過擬合於訓練集反而不適用於其他數據。

下圖是回歸問題的訓練誤差和泛化誤差的對比,可以看到存在一個臨界點使得泛化誤差最小,這個時候就是最好的模型複雜度。

另外,交叉驗證也是使用了這個原理。

偏差bias和方差variance與泛化誤差的聯繫

我們將真實模型的範圍用黃色區域表示。由於條件的限制和知識的限制,我們已知可達的預測範圍是橙色範圍。 f(x) 是實際的目標值,假設使用某個數據集實驗的預測結果為 f(x|w) ,他們的泛化誤差也就是距離為實線部分。對於每次實驗都會有不同的誤差。因此泛化誤差的期望是 ar{E_G} = frac{1}{N}sum_{i=1}^NE_G(w_{D_i}) = frac{1}{N}sum_{i=1}^N[sum_{xinchi}p(x)(hat{f}(x|w_{D_i})-f(x))^2]

引入一個新的中間項 hat{f_m}(x) 它表示的是多次實驗後的平均預測結果。也就是圖中最集中的那個點。因此泛化誤差的期望可以寫成

簡要概括即為,第一項為variance第二項為bias

偏差-方差引理 欠擬合與過擬合

Bias衡量的是訓練模型的平均泛化效果,當模型特別簡單比如維度特別低時,平均預測離真實值往往偏離較遠,因此bias比較大,此時屬於欠擬合。

Variance衡量的是使用不同數據集的預測模型泛化效果波動情況,當模型特別複雜維度特別高時,對於每次不同數據集訓練出的模型預測效果差別都很大,因此此時variance會比較大,此時屬於過擬合。

因此讓bias和variance達到一個平衡點會使得效果最好。

知乎高分回答將bias和variance也說的很明白。


推薦閱讀:
相關文章