1. 程式人生 > >機器學習基石 Lecture15: Validation

機器學習基石 Lecture15: Validation

機器學習基石 Lecture15: Validation

Model Selection Problem

目前為止在訓練模型的時候我們可以選擇的部分已經有很多了,演算法、迭代次數、更新步長、對映方式、正則項和正則項係數等等。在這裡插入圖片描述有這麼多可選的,如何最後得到一個最優的結果呢?這就涉及到最後模型選擇的問題。我們最終學習的目標是為了得到最小的 E

o u t E_{out} ,但是這個是無法得知的。所以究竟如何選擇是機器學習裡最重要的實際的一個問題。而用眼睛選擇在12講裡說過了不可行,因為大腦的複雜度沒有計算在內。
在這裡插入圖片描述
假設選擇的標準是選擇一個最小的 E
i n E_{in}
的模型,這樣會造成嚴重的過擬合問題,分開組合都是一樣的結果。
在這裡插入圖片描述
使用一個新的資料集 D t
e s t D_{test}
來得到一個 E t e s t E_{test} 作為選擇標準是一個不錯的選擇,而且根據有限數量的Hoeffding不等式有較強的理論保證。但是實際的問題是使用 E t e s t E_{test} 有時候沒有測試資料,而且這樣有些自欺欺人。
在這裡插入圖片描述
考慮了這兩種方式之後我們發現各有利弊,於是想到使用一個利用它們兩種優勢的方法,那就是將訓練集中留一部分資料不用到訓練裡,而只用來做模型選擇。
在這裡插入圖片描述

Validation

這個選出來做模型選擇的部分叫做驗證集。它是訓練集的一部分,而且需要保證與訓練資料一樣獨立同分布地來源於目標函式(分佈)。而且不會用到訓練中去,因此也有一定的理論保證。
在這裡插入圖片描述
但是這樣有個問題,因為訓練資料變少了一些,因此得到的結果可能比使用整個的資料集的結果稍微差一些。我們希望在最後選擇定了模型的時候將所有的資料放在一起用這個模型進行最後的一次訓練得到儘可能好的結果。於是整個驗證的過程就是使用訓練集訓練得到的不同的模型,然後使用驗證集選出 E v a l E_{val} 最小的。最後使用全部的資料對這個選出來的模型進行最後的訓練後得出結果。(感覺怪怪的,實際中有最後這步嗎?)
在這裡插入圖片描述
圖中給出了對應的使用不同的選擇方式對應不同驗證集大小的曲線,可以看出上圖所說的方法是最優的方式:
在這裡插入圖片描述
有時候sub-g的結果比in-sample的更差是因為它用的資料可能會比較少。

但是使用驗證集也存在一個矛盾的敵方。因為這裡存在三個量的約等於關係,而兩個約等號分別需要較小的驗證集大小以及較大的。不過一般是使用整個資料集的1/5的數量作為驗證集。
在這裡插入圖片描述

Leave-One-Out Cross Validation

考慮一種極端情形,每次只選擇一個樣本點作為驗證集。為了使這一個樣本點得到的驗證結果能夠逼近想要的 E o u t E_{out} ,可以將所有的點都作為驗證集選擇一次最後平均。
在這裡插入圖片描述
這個方法叫做留一法交叉驗證。演算法流程是,每次選一個點作為驗證集,其他的點做訓練集進行訓練,然後驗證。之後對每個點都這麼操作,將驗證的error平均。最後用這個平均值來選擇模型。
在這裡插入圖片描述
這個方法有一個數學上的保證,因為這個 E l o o c v ( H , A ) E_{loocv}(H,A) 的期望等於 E o u t ( N 1 ) \overline{E_{out}}(N-1) ,而這個值幾乎是 E o u t ( g ) E_{out}(g) 的無偏估計。一個可能的三個error的曲線如下圖所示:
在這裡插入圖片描述
使用留一交叉驗證確實能得到更好的結果。

V-Fold Cross Validation

但是留一法有個最大的問題,那就是將資料分成N份進行了N次計算,計算量非常大。只有在一些特殊演算法中才會使用這種方法,比如線性迴歸。還有個另外的問題就是每次只用了一個點來做驗證,方差可能會很大。
在這裡插入圖片描述
因此在實際的應用中通常使用的是將資料集分成V份,其中一份作為驗證集,剩下的用來訓練,然後每份迴圈平均得到 E v a l E_{val}
在這裡插入圖片描述
最後,一般來說使用驗證的時候都是用的是V-Fold的方法,因為兼顧了計算效率與穩定性。5折或者10折比較常用。 而且驗證集的結果依然是比較樂觀的結果,因為使用的是已有的資料,不能代表模型的真實水平。
在這裡插入圖片描述