為了更好的評估機器學習訓練出模型的泛化能力,即避免模型在訓練集上表現良好,但在未見過的數據上表現不佳(即過擬合),同時也減少了單一訓練/測試集劃分帶來的隨機性影響。
一、什么是K折交叉驗證?
1、將數據集劃分成K個子集(折/Fold):?原始數據集被隨機且均勻地分成K個大小近似相等的互斥子集。
2、進行K次訓練和評估:
在每次迭代中,選擇其中一個子集作為測試集(Validation Set)。
將其余的 K-1 個子集合并起來作為訓練集(Training Set)。
用訓練集訓練模型。
用測試集評估模型的性能(例如,計算準確率、F1分數、均方誤差等)。
3、計算平均性能:?重復上述過程K次,每次都選擇不同的子集作為測試集。這樣會得到K個性能評估結果。最終,將這K個結果取平均值,作為模型性能的最終估計。
二、常見案例
五重交叉驗證,K=5 。
具體步驟如下:
1、數據劃分:?將原始數據集隨機分成?5個大小近似相等?的互不重疊的子集(或稱為“折”)。我們稱它們為 Fold 1, Fold 2, Fold 3, Fold 4, Fold 5。
2、迭代訓練與評估(共進行5次):
第一次迭代:
將 Fold 1 作為測試集。
將 Fold 2, Fold 3, Fold 4, Fold 5 合并作為訓練集。
用訓練集訓練模型,并在測試集(Fold 1)上評估模型性能,得到性能指標?P1。
第二次迭代:
將 Fold 2 作為測試集。
將 Fold 1, Fold 3, Fold 4, Fold 5 合并作為訓練集。
用訓練集訓練模型,并在測試集(Fold 2)上評估模型性能,得到性能指標?P2。
第三次迭代:
將 Fold 3 作為測試集。
將 Fold 1, Fold 2, Fold 4, Fold 5 合并作為訓練集。
用訓練集訓練模型,并在測試集(Fold 3)上評估模型性能,得到性能指標?P3。
第四次迭代:
將 Fold 4 作為測試集。
將 Fold 1, Fold 2, Fold 3, Fold 5 合并作為訓練集。
用訓練集訓練模型,并在測試集(Fold 4)上評估模型性能,得到性能指標?P4。
第五次迭代:
將 Fold 5 作為測試集。
將 Fold 1, Fold 2, Fold 3, Fold 4 合并作為訓練集。
用訓練集訓練模型,并在測試集(Fold 5)上評估模型性能,得到性能指標?P5。
3、最終性能估計:?將這5次得到的性能指標?P1, P2, P3, P4, P5?取平均值,即?(P1 + P2 + P3 + P4 + P5) / 5。這個平均值就是模型在未見過數據上的性能的最終估計。
三、K的選擇
5折和10折交叉驗證是實踐中最常用的兩種K值。
K值越大(例如,留一法交叉驗證 LOOCV,K=N,N是樣本總數):
每次訓練集包含的樣本越多,越接近原始數據集,模型評估的偏差越小。
但需要訓練N次模型,計算成本非常高。
測試集只包含一個樣本,評估結果的方差可能很大(不穩定)。
K值越小(例如,2折交叉驗證):
訓練次數少,計算速度快。
但每次訓練集包含的樣本較少,模型可能訓練不足,評估結果的偏差可能較大。
5折交叉驗證?提供了一個很好的平衡:它既不會像LOOCV那樣計算成本過高,又能比簡單的訓練/測試劃分或小K值交叉驗證提供更穩定和可靠的性能估計。