1. 程式人生 > >交叉驗證原理

交叉驗證原理

交叉驗證(Cross-Validation): 有時亦稱迴圈估計, 是一種統計學上將資料樣本切割成較小子集的實用方法。於是可以先在一個子集上做分析,而其它子集則用來做後續對此分析的確認及驗證。 一開始的子集被稱為訓練集。而其它的子集則被稱為驗證集或測試集。WIKI

交叉驗證對於人工智慧,機器學習,模式識別,分類器等研究都具有很強的指導與驗證意義。
基本思想是把在某種意義下將原始資料(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(validation set or test set),首先用訓練集對分類器進行訓練,在利用驗證集來測試訓練得到的模型(model),以此來做為評價分類器的效能指標.

三大CV的方法
1).Hold-Out Method

  • 方法:將原始資料隨機分為兩組,一組做為訓練集,一組做為驗證集,利用訓練集訓練分類器,然後利用驗證集驗證模型,記錄最後的分類準確率為此Hold-OutMethod下分類器的效能指標.。Hold-OutMethod相對於K-fold Cross Validation 又稱Double cross-validation ,或相對K-CV稱 2-fold cross-validation(2-CV)
  • 優點:好處的處理簡單,只需隨機把原始資料分為兩組即可
  • 缺點:嚴格意義來說Hold-Out Method並不能算是CV,因為這種方法沒有達到交叉的思想,由於是隨機的將原始資料分組,所以最後驗證集分類準確率的高低與原始資料的分組有很大的關係,所以這種方法得到的結果其實並不具有說服性.(主要原因是訓練集樣本數太少,通常不足以代表母體樣本的分佈,導致 test 階段辨識率容易出現明顯落差。此外,2-CV 中一分為二的分子集方法的變異度大,往往無法達到「實驗過程必須可以被複制」的要求。)

2).K-fold Cross Validation(記為K-CV)

  • 方法:作為1)的演進,將原始資料分成K組(一般是均分),將每個子集資料分別做一次驗證集,其餘的K-1組子集資料作為訓練集,這樣會得到K個模型,用這K個模型最終的驗證集的分類準確率的平均數作為此K-CV下分類器的效能指標.K一般大於等於2,實際操作時一般從3開始取,只有在原始資料集合資料量小的時候才會嘗試取2. 而K-CV 的實驗共需要建立 k 個models,並計算 k 次 test sets 的平均辨識率。在實作上,k 要夠大才能使各回合中的 訓練樣本數夠多,一般而言 k=10 (作為一個經驗引數)算是相當足夠了。

xv folds 交叉驗證

A 5-fold cross validation method

  • 優點:K-CV可以有效的避免過學習以及欠學習狀態的發生,最後得到的結果也比較具有說服性.
  • 缺點:K值選取上

3).Leave-One-Out Cross Validation(記為LOO-CV)

  • 方法:如果設原始資料有N個樣本,那麼LOO-CV就是N-CV,即每個樣本單獨作為驗證集,其餘的N-1個樣本作為訓練集,所以LOO-CV會得到N個模型,用這N個模型最終的驗證集的分類準確率的平均數作為此下LOO-CV分類器的效能指標.
  • 優點:相比於前面的K-CV,LOO-CV有兩個明顯的優點:a.每一回閤中幾乎所有的樣本皆用於訓練模型,因此最接近原始樣本的分佈,這樣評估所得的結果比較可靠。  b. 實驗過程中沒有隨機因素會影響實驗資料,確保實驗過程是可以被複制的.
  • 缺點:計算成本高,因為需要建立的模型數量與原始資料樣本數量相同,當原始資料樣本數量相當多時,LOO-CV在實作上便有困難幾乎就是不顯示,除非每次訓練分類器得到模型的速度很快,或是可以用並行化計算減少計算所需的時間.

在模式識別與機器學習的相關研究中,經常會將 資料集分為 訓練集與測試集 這兩個子集,前者用以建立 模式,後者則用來評估該模式對未知樣本進行預測時的精確度,正規的說法是 generalization ability(泛化能力)

交叉驗證核心原則
Cross-validation 是為了有效的估測 generalization error 所設計的實驗方法

只有訓練集才可以用在 模式的訓練過程中,測試集 則必須在模式完成之後才被用來評估模式優劣的依據。

  • 常見的錯誤運用:許多人在研究都有用到 Evolutionary Algorithms(EA,遺傳演算法)與 classifiers,所使用的 Fitness Function (適應度函式)中通常都有用到 classifier 的辨識率,然而把Cross-Validation 用錯的案例還不少。前面說過,只有 training data 才可以用於 model 的建構,所以只有 training data 的辨識率才可以用在 fitness function 中。而 EA 是訓練過程用來調整 model 最佳引數的方法,所以只有在 EA結束演化後,model 引數已經固定了,這時候才可以使用 test data。
  • EA 與 CV結合研究方法: Cross-Validation 的本質是用來估測某個 classification method 對一組 dataset 的 generalization error,不是用來設計 classifier 的方法,所以 Cross-Validation 不能用在 EA的 fitness function 中,因為與 fitness function 有關的樣本都屬於 training set,那試問哪些樣本才是 test set 呢?如果某個 fitness function 中用了Cross-Validation 的 training 或 test 辨識率,那麼這樣的實驗方法已經不能稱為 Cross-Validation .
  • EA 與 k-CV 正確的搭配方法:是將 dataset 分成 k 等份的 subsets 後,每次取 1份 subset 作為 test set,其餘 k-1 份作為 training set,並且將該組 training set 套用到 EA 的 fitness function 計算中(至於該 training set 如何進一步利用則沒有限制)。因此,正確的 k-CV 會進行共 k 次的 EA 演化,建立 k 個classifiers。而 k-CV 的 test 辨識率,則是 k 組 test sets 對應到 EA 訓練所得的 k 個 classifiers 辨識率之平均值.

資料集分割原則
交叉驗證在,原始資料集分割為訓練集與測試集,必須遵守兩個要點:

  1. 訓練集中樣本數量必須夠多,一般至少大於總樣本數的 50%。
  2. 兩組子集必須從完整集合中均勻取樣。

其中第 2 點特別重要,均勻取樣的目的是希望減少 訓練集/測試集與完整集合之間的偏差(bias),但卻也不易做到。一般的作法是隨機取樣,當樣本數量足夠時,便可達到均勻取樣的效果。然而隨機也正是此作法的盲點,也是經常是可以在資料上做手腳的地方。舉例來說,當辨識率不理想時,便重新取樣一組訓練集與測試集,直到測試集的辨識率滿意為止,但嚴格來說便算是作弊