1. 程式人生 > 其它 >交叉驗證

交叉驗證

概念

交叉驗證,就是重複的使用資料,把得到的樣本資料進行切分,組合為不同的訓練集和測試集,用訓練集來訓練模型,用測試集來評估模型預測的好壞。在此基礎上可以得到多組不同的訓練集和測試集,某次訓練集中的某樣本在下次可能成為測試集中的樣本,即所謂“交叉”。

使用場景
  • 資料不是很充足, eg:對於普通適中問題,如果資料樣本量小於一萬條,我們就會採用交叉驗證來訓練優化選擇模型; 如果樣本大於一萬條的話,我們一般隨機的把資料分成三份,一份為訓練集(Training Set),一份為驗證集(Validation Set),最後一份為測試集(Test Set)
    用訓練集來訓練模型,用驗證集來評估模型預測的好壞和選擇模型及其對應的引數。把最終得到的模型再用於測試集,最終決定使用哪個模型以及對應引數。
分類
  1. 簡單交叉驗證
    所謂的簡單,是和其他交叉驗證方法相對而言的。首先,我們隨機的將樣本資料分為兩部分(比如: 70%的訓練集,30%的測試集),然後用訓練集來訓練模型,在測試集上驗證模型及引數。接著,我們再把樣本打亂,重新選擇訓練集和測試集,繼續訓練資料和檢驗模型。最後我們選擇損失函式評估最優的模型和引數。
  2. S折交叉驗證
    和第一種方法不同,S折交叉驗證會把樣本資料隨機的分成S份,每次隨機的選擇S-1份作為訓練集,剩下的1份做測試集。當這一輪完成後,重新隨機選擇S-1份來訓練資料。若干輪(小於S)之後,選擇損失函式評估最優的模型和引數
  3. 留一交叉驗證
    它是第二種情況的特例,此時S等於樣本數N,這樣對於N個樣本,每次選擇N-1個樣本來訓練資料,留一個樣本來驗證模型預測的好壞。此方法主要用於樣本量非常少的情況,比如對於普通適中問題,N小於50時,我一般採用留一交叉驗證。

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

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