轉:https://zhuanlan.zhihu.com/p/113623623
重點放在前面:
- N折交叉驗證有兩個用途:模型評估、模型選擇。
- N折交叉只是一種划分數據集的策略。想知道它的優勢,可以拿它和傳統划分數據集的方式進行比較。它可以避免固定划分數據集的局限性、特殊性,這個優勢在小規模數據集上更明顯。
- 把這種策略用於划分訓練集和測試集,就可以進行模型評估;把這種策略用於划分訓練集和驗證集,就可以進行模型選擇。
- 不用N折交叉驗證就不能進行模型評估和模型選擇了嗎?當然不是。只要有測試集,就能進行模型評估;只要有驗證集,就能進行模型選擇。所以N折交叉驗證只是在做這兩件事時的一種可選的優化手段。
正文:
之前做一個深度學習項目,因為數據集很小,實驗室的學長建議用交叉驗證的方法來避免過擬合。但是在學習相關資料的時候,發現很多地方對於“交叉驗證“的方法的說法不一致:有些說法是把數據集分成 {訓練集, 驗證集, 測試集},有些說法是只需要把數據集分成 {訓練集, 驗證集}。
實際上,交叉驗證有多種用途。如果進行交叉驗證的目的不一樣,那么在實施交叉驗證時的方法也會不一樣。交叉驗證的作用主要有兩個:
- 模型選擇
- 模型評估
用途一:模型選擇
交叉驗證最關鍵的作用是進行模型選擇,也可以稱為超參數選擇。
在這種情況下,數據集需要划分成訓練集、驗證集、測試集三部分,訓練集和驗證集的划分采用N折交叉的方式。很多人會把驗證集和測試集搞混,如果是這種情況,必須明確地區分驗證集和測試集。
- 驗證集是在訓練過程中用於檢驗模型的訓練情況,從而確定合適的超參數;
- 測試集是在訓練結束之后,測試模型的泛化能力。
具體的過程是,首先在訓練集和驗證集上對多種模型選擇(超參數選擇)進行驗證,選出平均誤差最小的模型(超參數)。選出合適的模型(超參數)后,可以把訓練集和驗證集合並起來,在上面重新把模型訓練一遍,得到最終模型,然后再用測試集測試其泛化能力。
對這種類型的交叉驗證比較有代表性的解釋有:台大李宏毅的《機器學習》課程、李飛飛的《CS231N計算機視覺》課程等。


用途二:模型評估
交叉驗證的另一個用途,就是模型是確定的,沒有多個候選模型需要選,只是用交叉驗證的方法來對模型的performance進行評估。
這種情況下,數據集被划分成訓練集、測試集兩部分,訓練集和測試集的划分采用N折交叉的方式。這種情況下沒有真正意義上的驗證集,個人感覺這種方法叫做”交叉測試“更合理...
相比於傳統的模型評估的方式(划分出固定的訓練集和測試集),交叉驗證的優勢在於:避免由於數據集划分不合理而導致的問題,比如模型在訓練集上過擬合,這種過擬合不是可能不是模型導致的,而是因為數據集划分不合理造成的。這種情況在用小規模數據集訓練模型時很容易出現,所以在小規模數據集上用交叉驗證的方法評估模型更有優勢。
對這種類型的交叉驗證比較有代表性的解釋有:周志華《機器學習》。

兩種用途的關系
兩種用途在本質上是一致的,模型評估可以看成是模型選擇過程中的一個步驟:先對候選的每個模型進行評估,再選出評估表現最好的模型作為最終模型。
交叉驗證的核心思想在於對數據集進行多次划分,對多次評估的結果取平均,從而消除單次划分時數據划分得不平衡而造成的不良影響。因為這種不良影響在小規模數據集上更容易出現,所以交叉驗證方法在小規模數據集上更能體現出優勢。
交叉驗證與過擬合的關系
當用交叉驗證進行模型選擇時,可以從多種模型中選擇出泛化能力最好的(即最不容易發生過擬合)的模型。從這個角度上講,交叉驗證是避免發生過擬合的手段。同樣是解決過擬合的方法,交叉驗證與正則化不同:交叉驗證通過尋找最佳模型的方式來解決過擬合;而正則化則是通過約束參數的范數來解決過擬合。
當用交叉驗證進行模型評估時,交叉驗證不能解決過擬合問題,只能用來評估模型的performance。
交叉驗證的優缺點
優點:獲得對模型更合理更准確的評估,尤其是數據集很小時,更能體現出這個優勢。
缺點:增加了計算量。
總結交叉驗證的使用方法
- 如果當前有多個候選模型,想從中選出一個最合適的模型,就可以用交叉驗證的方法進行模型選擇,尤其是當數據集很小時。
- 如果當前只有一個模型,想獲得對這個模型的performance最客觀的評估,就可以用交叉驗證的方法進行模型評估,尤其是當數據集很小時。