K折交叉驗證


在機器學習領域,特別是涉及到模型的調參與優化部分,k折交叉驗證是一個經常使用到的方法,本文就結合示例對它做一個簡要介紹。
該方法的基本思想就是將原訓練數據分為兩個互補的子集,一部分做為訓練數據來訓練模型,另一部分做為驗證數據來評價模型。(以下將前述的兩個子集的並集稱為原訓練集,將它的兩個互補子集分別稱為訓練集和驗證集;此處要區別驗證集與測試集,驗證集是原訓練集的一個子集,而測試集相對於原訓練集而言。)
圖示如下:

k折,就是將原訓練集分為k份,其中k-1份作訓練集,另一份作驗證集。

k折交叉驗證的基本思路如下:
第一步,不重復地將原訓練集隨機分為 k 份;
第二步,挑選其中 1 份作為驗證集,剩余 k-1 份作為訓練集用於模型訓練,在訓練集上訓練后得到一個模型,用這個模型在驗證集上測試,保存模型的評估指標;
第三步,重復第二步 k 次(確保每個子集都有一次機會作為驗證集);
第四步,計算 k 組測試指標的平均值作為模型精度的估計,並作為當前 k 折交叉驗證下模型的性能指標。

通常情況下,k一般取10;當原訓練集較小時,k可以大一點,這樣訓練集占整體比例就不至於太小,但訓練的模型個數也隨之增多;原訓練集較大時,k可以小一點。

1 使用k折交叉驗證反映模型平均性能

為了貼近實用,下面以一個鳶尾花分類的例子具體說明該驗證方法的細節:

上圖是在沒有使用k折交叉驗證的情況下,一個模型初次訓練之后的准確率,並不能代表模型的平均性能。

使用了k折交叉驗證方法后,准確率情況如下,大致可以反映該模型的平均水平:

2 借助k折交叉驗證調整模型超參數

當所需訓練的模型需要調節超參數時,可以在多個不同的超參數下用訓練集訓練多個模型,選擇在驗證集上有最佳性能的超參數值,最后用測試集做一次測試,以得到推廣誤差率的預估。

為了避免浪費過多訓練數據在驗證集上,交叉驗證便是常用方法:訓練集分成互補的子集,每個模型用不同的訓練子集訓練,再用剩下的驗證子集驗證。一旦確定模型類型和超參數,最終的模型使用這些超參數在全部的訓練集(即上文所述的原訓練集)上進行訓練,用測試集得到推廣誤差率。

從上圖中可以知,對於每一個超參數值,選用10折交叉驗證,選擇12~18的超參數值最好,大於18之后,准確率開始下降(過擬合)。
注意:此處的准確率是在驗證集上的准確率;在細節處理上,由於模型較小,針對每一個超參數,准確率是在10個(因為是10折交叉驗證)驗證集上的平均准確率。


免責聲明!

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



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