1. 程式人生 > >問題建模之交叉驗證

問題建模之交叉驗證

在離線環節,需要對模型進行評估,根據評估指標選擇最佳模型。這就需要交叉驗證。
下面介紹幾種常用的交叉驗證方法。

一、留出法

留出法非常簡單,就是將資料集劃分為訓練集合測試集,它甚至不能看做是一種交叉驗證,因為它並沒有交叉的操作。
這種方法的缺點是:
1、劃分測試集資料量對結論有影響。測試集資料量小,模型可信度不高;訓練集資料量小,模型效果可能不夠好。通常的做法是,2 /3 資料作為訓練集,1 /3 資料作為測試集。
2、劃分哪些樣本作為測試集可能會導致資料分佈發生變化,進而影響實驗結論。

針對上述缺點,我們會進行多次留出法實驗,每次隨機劃分,最終將多次得到的實驗結論進行平均。

另外實際工作中有一種普遍的應用場景廣泛使用留出法:資料有明顯的時間序列因素,即線上資料的時間都在離線資料集之後,這種情況下應該根據時間對離線資料集劃分訓練集和測試集,使測試集時間分佈在訓練集時間之後。
比如,在2017 年6 月初需要訓練模型,可以採用2017 年1 月到2017 年4月的資料作為訓練集,2017年5月的資料作為測試集。

二、K 折交叉驗證

K折交叉驗證就是將資料集D 劃分成K份互斥資料集,一般是平均分配使每份資料量接近並且資料分佈儘可能一致。每次用一份資料測試,其餘K-1份資料訓練,需要迭代K輪得到K個模型;最後再將K份測試結果彙總到一起評估一個離線指標。

K折交叉驗證的穩定性與K取值有很大關係。K值太小實驗穩定性依然偏低,K值太大又可能導致實驗成本高,K最常用的取值是5和10 。

相比留出法,K折交叉驗證更為複雜,需要訓練K個模型,但是資料利用率更高。K = 2 時,K折交叉驗證和留出法仍有差異,留出法相當於用D1訓練D2測試,得到測試結果cv_score1 ,而2折交叉驗證還會用D2 訓練D1測試,得到測試結果cv_score2,再取兩次結果的平均值。另外,K折交叉,驗證也可能因為單次K份資料劃分導致資料分佈發生變化而引入偏差,因此也經常會進行多次K折交叉驗證後求平均。比如進行10 次5 折交叉驗證,這10 次劃分5 折交叉驗證得到的資料會不同。

兩個變種:

  1. 留一法(Leave-One-Out, LOO ) :假定資料集D 中有N條資料,當K折交叉驗證的K=N 時,就是留一法,即每一條樣本當測試集,其餘資料作訓練。LOO策略的優缺點都很明顯。訓練N個模型,每個模型都基本用到了全部的資料,得到的模型和全部資料D得到的模型更相似,並且不再受隨機樣本劃分方式的影響,因為劃分方式只有一種了。但是當樣本量N很大時,計算成本非常高,計算甚至不可行,而且每個模型只有一條測試資料,不能有效幫助每個模型調參達到最優。但是在資料稀疏
    時,LOO很適用。
  2. 分層K折交叉驗證( Stratified k”Fold ):在類不均衡情況下常用該方法,該方法對每個類別進行K折劃分,使每份資料中各類別的資料分佈與完整資料集分佈更一致。