交叉驗證概述


交叉驗證

 

     交叉驗證的理論是由 Seymour Geisser所開始的。 它對於防范 testing hypotheses suggested by the data是非常重要的,
特別是當后續的 樣本是危險、成本過高或不可能( uncomfortable science)去搜集。
     交叉驗證(Cross-validation):有時亦稱循環估計, 是一種統計學上將數據樣本切割成較小子集的實用方法。主要用於建模應用中,例如PCR 、PLS 回歸建模中。在給定的建模樣本中,拿出大部分樣本進行建模型,留小部分樣本用剛建立的模型進行預報,並求這小部分樣本的預報誤差,記錄它們的平方加和。
 
中文名
交叉驗證
外文名
Cross validation
實    質
建模應用中
特    點
PCR 、PLS 回歸建模中

交叉驗證概念

  這個過程一直進行,直到所有的樣本都被預報了一次而且僅被預報一次。把每個樣本的預報誤差平方加和,稱為PRESS(predicted Error Sum of Squares)。

交叉驗證基本思想

  交叉驗證的基本思想是把在某種意義下將原始數據(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(validation set or test set),首先用訓練集對分類器進行訓練,再利用驗證集來測試訓練得到的模型(model),以此來做為評價分類器的性能指標.

交叉驗證目的

  用交叉驗證的目的是為了得到可靠穩定的模型。在建立PCR 或PLS 模型時,一個很重要的因素是取多少個主成分的問題。用cross validation 校驗每個主成分下的PRESS值,選擇PRESS值小的主成分數。或PRESS值不再變小時的主成分數。
常用的精度測試方法主要是 交叉驗證,例如10折交叉驗證(10-fold cross validation),將 數據集分成十份,輪流將其中9份做訓練1份做驗證,10次的結果的均值作為對算法精度的估計,一般還需要進行多次10折交叉驗證求均值,例如: 10次10折交叉驗證,以求更精確一點。
交叉驗證有時也稱為 交叉比對,如:10折交叉比對

交叉驗證常見的交叉驗證形式

交叉驗證 Holdout 驗證

  常識來說,Holdout 驗證並非一種交叉驗證,因為數據並沒有交叉使用。 隨機從最初的樣本中選出部分,形成交叉驗證數據,而剩余的就當做訓練數據。 一般來說,少於原本樣本三分之一的數據被選做驗證數據。
  • 方法:將原始數據隨機分為兩組,一組做為訓練集,一組做為驗證集,利用訓練集訓練分類器,然后利用驗證集驗證模型,記錄最后的分類准確率為此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 中一分為二的分子集方法的變異度大,往往無法達到「實驗過程必須可以被復制」的要求。)

交叉驗證 K-fold cross-validation

  K折交叉驗證,初始采樣分割成K個子樣本,一個單獨的子樣本被保留作為驗證模型的數據,其他K-1個樣本用來訓練。交叉驗證重復K次,每個 子樣本驗證一次,平均K次的結果或者使用其它結合方式,最終得到一個單一估測。這個方法的優勢在於,同時重復運用隨機產生的子樣本進行訓練和驗證,每次的結果驗證一次,10折交叉驗證是最常用的。
  • 優點:每一個樣本數據都即被用作訓練數據,也被用作測試數據。避免的過度學習和欠學習狀態的發生,得到的結果比較具有說服力。
  • 缺點:K值選取上

交叉驗證留一驗證 Leave-One-Out Cross Validation

  正如名稱所建議, 留一驗證( LOOCV)意指只使用原本樣本中的一項來當做驗證資料, 而剩余的則留下來當做訓練資料。 這個步驟一直持續到每個樣本都被當做一次驗證資料。 事實上,這等同於和 K-fold 交叉驗證,其中 K為原本樣本個數。 在某些情況下是存在有效率的演算法,如使用kernel regression 和Tikhonov regularization。
  • 優點:每一個分類器或模型都是用幾乎所有的樣本來訓練模型,最接近樣本,這樣評估所得的結果比較可靠。實驗沒有隨機因素,整個過程是可重復的。
  • 缺點:計算成本高,當N非常大時,計算耗時,因為需要建立的模型數量與原始數據樣本數量相同,當原始數據樣本數量相當多時,LOO-CV在實作上便有困難幾乎就是不顯示,除非每次訓練分類器得到模型的速度很快,或是可以用並行化計算減少計算所需的時間.
 

十折交叉驗證:10-fold cross validation

     英文名叫做10-foldcross-validation,用來測試算法准確性。是常用的測試方法。將數據集分成十分,輪流將其中9份作為訓練數據,1份作為測試數據,進行試驗。每次試驗都會得出相應的正確率(或差錯率)。10次的結果的正確率(或差錯率)的平均值作為對算法精度的估計,一般還需要進行多次10折交叉驗證(例如10次10折交叉驗證),再求其均值,作為對算法准確性的估計。

      之所以選擇將數據集分為10份,是因為通過利用大量數據集、使用不同學習技術進行的大量試驗,表明10折是獲得最好誤差估計的恰當選擇,而且也有一些理論根據可以證明這一點。但這並非最終診斷,爭議仍然存在。而且似乎5折或者20折與10折所得出的結果也相差無幾。

    10折交叉驗證是把樣本數據分成10份,輪流將其中9份做訓練數據,將剩下的1份當測試數據,10次結果的均值作為對算法精度的估計,通常情況下為了提高精度,還需要做多次10折交叉驗證。更進一步,還有K折交叉驗證,10折交叉驗證是它的特殊情況。K折交叉驗證就是把樣本分為K份,其中K-1份用來做訓練建立模型,留剩下的一份來驗證,交叉驗證重復K次,每個子樣本驗證一次。

 

交叉驗證插值

      交叉驗證(cross-validation) 方法是一種評價插值方法質量的方法,通過交叉驗證報告文件中的統計量可以確定設置的插值方法相關參數是否合理,從而可以比較出不同插值模型得出結果的不同質量。

     交叉驗證方法即移去一個已知采樣點的數據,用其他采樣點的數據來估計該點以檢驗插值精度的方法。

     交叉驗證可以使用一些統計指標來進行評價,令 z0為采樣值,ze為對應點的估計值,則有

技術分享

 

 

  在模式識別與機器學習的相關研究中,經常會將 數據集分為 訓練集與測試集 這兩個子集,前者用以建立 模式,后者則用來評估該模式對未知樣本進行預測時的精確度,正規的說法是 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),但卻也不易做到。一般的作法是隨機取樣,當樣本數量足夠時,便可達到均勻取樣的效果。然而隨機也正是此作法的盲點,也是經常是可以在數據上做手腳的地方。舉例來說,當辨識率不理想時,便重新取樣一組訓練集與測試集,直到測試集的辨識率滿意為止,但嚴格來說便算是作弊。

 
 
 
 拓展:

  當假設空間含有不同復雜度(如不同參數數量)的模型時,就要進行模型選擇。如果過度追求在訓練數據集上誤差小的模型,那么選出來的模型在測試數據集上的誤差就可能很大,此時模型過擬合了訓練數據集,圖1顯示了訓練誤差和測試誤差與模型復雜度之間的關系。

這里寫圖片描述

所以模型選擇時應特別注意防止過擬合,本文首先回顧了過擬合,之后介紹防止過擬合常用的方法之一——交叉驗證。

過擬合

  若訓練得到的模型的復雜度超過真實模型的復雜度,就稱發生了過擬合,反之為欠擬合。過擬合發生的原因是訓練數據集中存在隨機噪聲和確定性噪聲。

這里寫圖片描述 (注:圖片來自 Tutorial Slides by  Andrew Moore)

交叉驗證

交叉驗證(Cross-validation,CV) 目的:檢測和預防過擬合

交叉驗證方法 優點 缺點
Test-set 計算開銷小 無法評估模型泛化能力
Leave-one-out cross validation(LOOCV) 不浪費數據 計算開銷大
k-fold cross validation 計算開銷相對LOOCV小 浪費1/k的數據

  Test-set 將數據集中的全部數據用於模型訓練,不考慮模型驗證,選擇訓練集上誤差最小的模型為最優模型,易產生過擬合。 LOOCV (Leave-one-out Cross Validation)

  下圖示例了使用LOOCV方法對線性回歸、二次回歸、直接點連接模型進行選擇的過程.從大小為n的數據集中抽出一個作為模型驗證樣本,其他的(n-1)個樣本用於模型訓練,這樣對於線性擬合、二次擬合、點連接三種模型分別有n個模型和對應得3個的均方誤差(MSE),選擇均方差最小 的,即二次擬合為最優模型。 

線性擬合 二次擬合 點連接
這里寫圖片描述 這里寫圖片描述 這里寫圖片描述

k-fold cross validation

  以k=3為例,下圖示例了使用3-fold交叉驗證的方法對線性回歸、二次回歸、直接點連接模型進行選擇的過程,數據集被隨機划分為3份,其中2份用來訓練模型,1份用來驗證,這樣針對線性、二次擬合、點連接模型分別有3個訓練好的模型和均方誤差(MSE),選擇均方差最小 的,即二次擬合為最優模型。

線性擬合 二次擬合 點連接
這里寫圖片描述 這里寫圖片描述 這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM