在機器學習領域,特別是涉及到模型的調參與優化部分,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折交叉驗證)驗證集上的平均準確率,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195332.html
標籤:Python
上一篇:Python短文本自動識別個體是否有自殺傾向【新手必學】
下一篇:Python3(十一) 原生爬蟲
