交叉驗證(Cross Validation)

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

    根據切分的方法不同,交叉驗證分爲下面三種:   

    第一種是簡單交叉驗證,所謂的簡單,是和其他交叉驗證方法相對而言的。首先,我們隨機的將樣本數據分爲兩部分(比如: 70%的訓練集,30%的測試集),然後用訓練集來訓練模型,在測試集上驗證模型及參數。接着,我們樣再把本打亂,重新選擇訓練集和測試集,繼續訓練數據和檢驗模型。最後我們選擇損失函數評估最優的模型和參數。 

     第二種是S折交叉驗證(S-Folder Cross Validation)。和第一種方法不同,S折交叉驗證會把樣本數據隨機的分成S份,每次隨機的選擇S-1份作爲訓練集,剩下的1份做測試集。當這一輪完成後,重新隨機選擇S-1份來訓練數據。若干輪(小於S)之後,選擇損失函數評估最優的模型和參數。

    第三種是留一交叉驗證(Leave-one-out Cross Validation),它是第二種情況的特例,此時S等於樣本數N,這樣對於N個樣本,每次選擇N-1個樣本來訓練數據,留一個樣本來驗證模型預測的好壞。此方法主要用於樣本量非常少的情況,比如對於普通適中問題,N小於50時,我一般採用留一交叉驗證。

    通過反覆的交叉驗證,用損失函數來度量得到的模型的好壞,最終我們可以得到一個較好的模型。那這三種情況,到底我們應該選擇哪一種方法呢?一句話總結,如果我們只是對數據做一個初步的模型建立,不是要做深入分析的話,簡單交叉驗證就可以了。否則就用S折交叉驗證。在樣本量少的時候,使用S折交叉驗證的特例留一交叉驗證。

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

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