交叉驗證(Cross Validation)

交叉驗證(Cross Validation

交叉驗證,有時亦稱循環估計, 是一種統計學上將數據樣本切割成較小子集的實用方法。於是可以先在一個子集上做分析,而其它子集則用來做後續對此分析的確認及驗證。一開始的子集被稱爲訓練集。而其它的子集則被稱爲驗證集測試集。交叉驗證的目標是在訓練階段定義一組用於“測試”模型的數據集,以便減少像過擬合的問題,得到該模型將如何衍生到一個獨立的數據集的提示。

1.訓練集 vs. 測試集

在模式識別與機器學習的相關研究中,經常會將數據集分爲訓練集跟測試集這兩個子集,前者用以建立模型,後者則用來評估該模型對未知樣本進行預測時的精確度,也即泛化能力(generalization ability)。怎麼將完整的數據集分爲訓練集跟測試集,必須遵守如下要點:

  • 只有訓練集纔可以用在模型的訓練過程中,測試集則必須在模型完成之後才被用來評估模型優劣的依據。
  • 訓練集中樣本數量必須夠多,一般至少大於總樣本數的50%。
  • 兩組子集必須從完整集合中均勻取樣。

2.交叉驗證的使用 

交叉驗證法的基本思想就是將原始數據進行分組,一部分做爲訓練集來訓練模型,另一部分做爲測試集來評價模型。

假設有個未知模型具有一個或多個待定的參數,且有一個數據集能夠反映該模型的特徵屬性(訓練集)。適應的過程是對模型的參數進行調整,以使模型儘可能反映訓練集的特徵。如果從同一個訓練樣本中選擇獨立的樣本作爲驗證集合,當模型因訓練集過小或參數不合適而產生過擬合時,驗證集的測試予以反映。 交叉驗證是一種預測模型擬合性能的方法。

3.常見的交叉驗證形式

Hold-out 驗證

嚴格意義上說,Holdout 驗證並非一種交叉驗證,因爲數據並沒有交叉使用。 隨機從最初的樣本中選出部分,形成交叉驗證數據,而剩餘的就當做訓練數據。 一般來說,少於原本樣本三分之一的數據被選做驗證數據。此種方法的好處的處理簡單,只需隨機把原始數據分爲兩組即可,因此用於樣本數量較多的情況。

k折交叉驗證(k-CV)

k折交叉驗證(k-fold cross-validation),將訓練集分割成k個子樣本,一個單獨的子樣本被保留作爲驗證模型的數據,其他k − 1個樣本用來訓練。交叉驗證重複k次,每個子樣本驗證一次,平均k次的結果或者使用其它結合方式,最終得到一個單一估測。這個方法的優勢在於,同時重複運用隨機產生的子樣本進行訓練和驗證,每次的結果驗證一次,可以有效的避免過學習以及欠學習狀態的發生,10次交叉驗證是最常用的。

留一驗證(LOO-CV)

正如名稱所建議,留一驗證(leave-one-out cross-validation, LOOCV)意指只使用原本樣本中的一項來當做驗證樣本,而剩餘的則留下來當做訓練樣本。該方法用於樣本數較少的情況。這個步驟一直持續到每個樣本都被當做一次驗證樣本。 事實上,這等同於k折交叉驗證,是k折交叉驗證的一種特殊情況,其中k爲原本樣本個數。在某些情況下是存在有效率的算法,如使用kernel regression 和吉洪諾夫正則化。相比於前面的K-CV,LOO-CV有兩個明顯的優點:

  • 每一回閤中幾乎所有的樣本皆用於訓練模型,因此最接近原始樣本的分佈,這樣評估所得的結果比較可靠。
  • 實驗過程中沒有隨機因素會影響實驗數據,確保實驗過程是可以被複制的。

自助法(bootstrapping)

這是一種比較特殊的交叉驗證方式,用於樣本量少的時候。比如我們有m個樣本(m較小),每次在這m個樣本中隨機採集一個樣本,放入訓練集,採樣完後把樣本放回。這樣重複採集m次,我們得到m個樣本組成的訓練集。當然,這m個樣本中很有可能有重複的樣本數據。同時,用沒有被採樣到的樣本做測試集。這樣接着進行交叉驗證。由於我們的訓練集有重複數據,這會改變數據的分佈,因而訓練結果會有估計偏差,因此,此種方法不是很常用,除非數據量真的很少,比如小於20個。


【補充】

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

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

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

2.交叉驗證中的“交叉”體現在哪兒?

交叉驗證是在機器學習建立模型和驗證模型參數時常用的辦法。交叉驗證,顧名思義,就是重複的使用數據,把得到的樣本數據進行切分,組合爲不同的訓練集和測試集,用訓練集來訓練模型,用測試集來評估模型預測的好壞。在此基礎上可以得到多組不同的訓練集和測試集,某次訓練集中的某樣本在下次可能成爲測試集中的樣本,即所謂“交叉”。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章