K折交叉驗證

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

k折,就是將原訓練集分爲k份,其中k-1份做訓練集,另外一份做驗證集。性能

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

一般狀況下,k通常取10;當原訓練集較小時,k能夠大一點,這樣訓練集佔總體比例就不至於過小,但訓練的模型個數也隨之增多;原訓練集較大時,k能夠小一點。測試

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

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

上圖是在沒有使用k折交叉驗證的狀況下,一個模型初次訓練以後的準確率,並不能表明模型的平均性能。方法

使用了k折交叉驗證方法後,準確率狀況以下,大體能夠反映該模型的平均水平:im

###2 藉助k折交叉驗證調整模型超參數數據

當所需訓練的模型須要調節超參數時,能夠在多個不一樣的超參數下用訓練集訓練多個模型,選擇在驗證集上有最佳性能的超參數值,最後用測試集作一次測試,以獲得推廣偏差率的預估。db

爲了不浪費過多訓練數據在驗證集上,交叉驗證即是經常使用方法:訓練集分紅互補的子集,每一個模型用不一樣的訓練子集訓練,再用剩下的驗證子集驗證。一旦肯定模型類型和超參數,最終的模型使用這些超參數在所有的訓練集(即上文所述的原訓練集)上進行訓練,用測試集獲得推廣偏差率。

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

相關文章
相關標籤/搜索