談談對泛化誤差的理解

2021-08-24 20:26:04 字數 2692 閱讀 7845

誤差這個詞我們經常會遇到,在機器學習中,我們最終想要的結果實際上就是減小學習後的估計值和真實值的誤差。比如在回歸中,我們的 loss function 就表示乙個誤差。而我們需要做的,就是最小化這個誤差,也就是對 object function 的處理。

那麼什麼是泛化誤差呢?剛剛說我們最小化了 loss function, 那是不是就一定說明我訓練了一些樣本後,保證求出了一組最佳的引數從而得到了乙個完美的模型呢?顯然不是,中國有句老話說的很好:「是騾子是馬,拉出來溜溜」。怎麼評價學習後得到的模型呢?實踐是檢驗真理的唯一標準,我們再用一些資料(test data)來看看我們得到的模型在這些資料實踐後,這時候的誤差是多少。而這個誤差,和剛剛 loss function的誤差是沒有關係的,也就是我們所說的泛化誤差。而將資料劃分為訓練集(train set)和驗證集(validation set)從而來求取泛化誤差的方法,就是所謂的交叉驗證

所以交叉驗證在做什麼?假設我們有多種可能的模型而我們不能確定哪一種是最好的,那麼我們就需要測試每乙個模型訓練後的泛化誤差,從而選擇最佳的模型。這裡想多說一句,什麼是模型,因為在我學習這部分時一直理解為模型就是不同引數下的同一種假設函式。實際上是完全錯誤的。模型指的是假設函式長什麼樣子,比如在回歸問題中,我的假設函式可能是乙個二次函式,也可能是三次甚至更高的多項式。每乙個模型自然對應著一組最佳的引數,可以由最小化 loss function 來得到。交叉驗證的意義在於,不是選最佳的引數,而是對每乙個可能的模型,用訓練集最小化 loss function 的誤差從而得到最佳引數後,運用驗證集來算出泛化誤差。通過對泛化誤差的評估來選出最優的模型。

所以我的理解就是: 訓練集的作用是最小化 loss function 這樣乙個誤差,從而能夠得到最佳的引數,他不管你輸入的是什麼模型;驗證集的作用是求取乙個模型的泛化誤差,它預設在測試後已經得到了該模型的最佳引數。所以交叉驗證的核心在於驗證集!

泛化誤差的意義,其實就是在訓練後的模型,想來看一看這個模型具不具備代表性。那麼這個代表性怎麼去衡量呢?我們用偏差(bias)和方差(variance)來描述。偏差是什麼?給了一些新的樣本,我用我所得到的模型對這個樣本進行估值,那這個估值和真實值的差距就是偏差;方差是什麼?在不同的訓練集上即使是同一模型我們可能會得到不同的引數,那麼不同訓練集上得到的假設函式對新樣本做出的估值是不同的。我們用這些不同估值的期望作為最終這個模型對新樣本的估值,那麼我們想看一下這個期望的估值與不同訓練集訓練結果得到的估值的離散程度。

這和我們統計學上的期望與方差是相類似的,可以對比來看。我們希望最終的估值與實際值相差不大,而且所得到的模型也要相對穩定。在這種情況下我們就可以說我們的模型通用性比較強,也就是泛化。

我們剛剛說偏差和方差可以來衡量這個模型是不是具有代表性,那麼我們在驗證集上得到了泛化誤差後,怎麼就能直接評估這個模型呢?我們來看一下泛化誤差的構成。

先來定義幾個概念:

在訓練集 dd 上,我們訓練後的模型為fd(x)fd(x)

那麼該模型對資料 xx 的**輸出為 f(x)¯=ed[fd(x)]f(x)¯=ed[fd(x)]

驗證集樣本的真實值為 yy

由於會有雜訊的存在,樣本的標籤值可能與真實值有出入,標籤值設為 ydyd

雜訊為 ϵ=y−ydϵ=y−yd,並且服從高斯分布 ϵ∼n(0,σ2)ϵ∼n(0,σ2)

根據偏差的定義,為**輸出與樣本標籤的差值,bias=y−f(x)¯bias=y−f(x)¯

根據方差的定義,為**輸出與不同測試集差的離散程度,var=ed[(fd(x)−f(x)¯)2]var=ed[(fd(x)−f(x)¯)2]

泛化誤差的定義為 ed[(yd−fd(x))2]ed[(yd−fd(x))2]

泛化誤差即每一組訓練集得到結果後與驗證集計算誤差,誤差的均值就作為衡量泛化的標準。

ed[(yd−fd(x))2]=ed[(yd−f(x)¯+f(x)¯−fd(x))2]

=ed[(yd−f(x)¯)2]+ed[(f(x)¯−fd(x))2]+0

=ed[(yd−f(x)¯)2]+ed[(f(x)¯−fd(x))2]

=ed[(yd−y+y−f(x)¯)2]+ed[(f(x)¯−fd(x))2] 

=ed[(yd−y)2]+ed[(y−f(x)¯)2]+0+ed[(f(x)¯−fd(x))2]

=ed[(yd−y)2]+ed[(y−f(x)¯)2]+ed[(f(x)¯−fd(x))2]

=ϵ2+bias2+vared[(yd−fd(x))2]

=ed[(yd−f(x)¯+f(x)¯−fd(x))2]

=ed[(yd−f(x)¯)2]+ed[(f(x)¯−fd(x))2]+0

=ed[(yd−f(x)¯)2]+ed[(f(x)¯−fd(x))2]

=ed[(yd−y+y−f(x)¯)2]+ed[(f(x)¯−fd(x))2]

=ed[(yd−y)2]+ed[(y−f(x)¯)2]+0+ed[(f(x)¯−fd(x))2]

=ed[(yd−y)2]+ed[(y−f(x)¯)2]+ed[(f(x)¯−fd(x))2]

=ϵ2+bias2+var

由這個推導可以看出來,對於每一次交差驗證完我們能夠得到一組誤差 (yd−fd(x))2(yd−fd(x))2,當我們把所有誤差求均值後發現產生的誤差,可以分解為偏差,方差以及雜訊。也就能夠體現出泛化能力。

以上是我對泛化誤差和交叉驗證的理解,總結起來就是,泛化誤差是衡量乙個模型推廣能力的標準,而交叉驗證正是利用這一性質,將資料集分為訓練集合驗證集,對不同的模型計算泛化誤差。從而幫助我們選取這個問題下的最佳模型。

談談對泛化誤差的理解

誤差這個詞我們經常會遇到,在機器學習中,我們最終想要的結果實際上就是減小學習後的估計值和真實值的誤差。比如在回歸中,我們的 loss function 就表示乙個誤差。而我們需要做的,就是最小化這個誤差,也就是對 object function 的處理。那麼什麼是泛化誤差呢?剛剛說我們最小化了 lo...

關於訓練誤差 測試誤差 泛化誤差

我們在學習模式識別的時候,總是會遇到一些專業詞彙,而其中有的專業詞彙叫人傻傻分不清。今天我就來說說訓練誤差 測試誤差 泛化誤差到底是什麼,區別所在。對於分類學習演算法,我們一般將樣本集分為訓練集和測試集,其中訓練集用於演算法模型的學習或訓練,而測試集通常用於評估訓練好的模型對於資料的 效能評估。而這...

名詞解析之泛化誤差

摘要 以前在機器學習中一直使用經驗風險來逼近真實風險,但是事實上大多數情況經驗風險並不能夠準確逼近真實風險。後來業界就提出了泛化誤差的概念 generalization error 在機器學習中泛化誤差是用來衡量乙個學習機器推廣未知資料的能力,即根據從樣本資料中學習到的規則能夠應用到新資料的能力。常...