Cross-Validation(交叉驗證)詳解
我們假設模型集合為有限集,我們的目的就是從這d個模型中,選擇最有效的模型。
假設樣本集為S,根據經驗風險最小化原則(ERM),可能會使用這樣的演算法:
1.在S上訓練每個模型,得到相應的假設函式;
2.選擇訓練誤差最小的假設函式,即為我們需要的函式。
然而,這樣的演算法實際上並不有效。以多元迴歸模型為例,指數越高,對樣本集S的擬合就越準確,這樣雖然保證了較低的訓練誤差,但是這種方法會使泛化誤差變得很大,因此,這並不是一個好的方法。
簡單交叉驗證
下面介紹一種方法,稱為簡單交叉驗證(simple cross validation):
隨機將S分為(例如70%的樣本)和(剩下30%的樣本),這裡稱作簡單交叉驗證集;
1.在上訓練每個模型,得到相應的假設函式;
2.將每個假設函式通過交叉驗證集進行驗證,選擇使得訓練誤差最小的;
3.通過簡單交叉驗證,可以得到每個假設函式的真實的泛化誤差,從而可以選擇泛化誤差最小的那個假設函式。
通常,預留1/4-1/3的樣本作為交叉驗證集,而剩下的作為訓練集使用。
步驟3也可以替換成這樣的操作:選擇相應的模型,使得訓練誤差最小,然後在用對整個樣本集S進行訓練。使用這樣的方法原因是有的學習演算法對於初試的條件非常敏感,因此,他也許在簡單交叉驗證的不足之處在於:此方法浪費了中的資料,即使我們將模型再次帶入整個樣本集,我們仍然只用了70%的樣本建模。如果樣本的採集非常的容易以致樣本量非常之大,使用交叉驗證方法沒有什麼問題;但如果樣本非常稀缺,採集困難,那麼我們就需要考慮一種能夠充分利用樣本的方法。
k-折交叉驗證
k-折交叉驗證將樣本集隨機劃分為k份,k-1份作為訓練集,1份作為驗證集,依次輪換訓練集和驗證集k次,驗證誤差最小的模型為所求模型。具體方法如下:
1.隨機將樣本集S劃分成k個不相交的子集,每個子集中樣本數量為m/k個,這些子集分別記作
2.對於每個模型,進行如下操作:
for j=1 to k
將作為訓練集,訓練模型,得到相應的假設函式。
再將作為驗證集,計算泛化誤差;
3.計算每個模型的平均泛化誤差,選擇泛化誤差最小的模型。
K-折交叉驗證方法,每次留作驗證的為總樣本量的1/k(通常取k=10),因此每次用於訓練的樣本量相應增加了,然而K-折交叉驗證對於每個模型都需要執行k次,他的計算成本還是較高的。
還有一種k-折交叉驗證的極端形式,當k=m時,即把樣本集S劃分為m個子集,其中的m-1個樣本作為訓練集,剩下1個樣本作為驗證集,如此迴圈m次,選取驗證誤差最小的模型。
以上介紹的各種交叉驗證的方法,可用於模型的選擇,但也可以針對單個演算法和模型進行評價。
小結:交叉驗證是一種模型選擇方法,其將樣本的一部分用於訓練,另一部分用於驗證。因此不僅考慮了訓練誤差,同時也考慮了泛化誤差。從這裡可以看出機器學習、資料探勘與傳統統計學的一個重要差別:傳統統計學更注重理論,追求理論的完整性和模型的精確性,在對樣本建立某個特定模型後,用理論去對模型進行各種驗證;而機器學習/資料探勘則注重經驗,如交叉驗證,就是通過不同模型在同一樣本上的誤差表現好壞,來選擇適合這一樣本的模型,而不去糾結理論上是否嚴謹。