數據與特徵

訓練/驗證/測試集劃分(train/validation/test split)

/ TRAYN val-ih-DAY-shun TEST split /

設想一位老師,想知道學生是真的學會了,還是只是背了下來。訣竅是:用一套題目來教,再用誰都沒見過的題目來評分。劃分資料集也是同樣的道理:我們把它切成幾堆相互獨立的部分,好分辨真學習與死記硬背。

通常分成三堆。訓練集(training set)是模型用來學習的部分——它會調整自身去擬合這些例子。驗證集(validation set)是開發過程中用的「模擬考」,用來比較各種方案、調節旋鈕(即超參數 hyperparameter),卻不去偷看那場期末大考。測試集(test set)被鎖起來,只在最後碰一次,用以誠實地估計模型面對從未見過的資料時會有怎樣的表現。一種常見的粗略劃分是訓練70%、驗證15%、測試15%,但具體比例會因情況而異。

為何重要:如果你用模型學過的那些例子來給它打分,它靠死記就能得到近乎滿分——這個陷阱叫過擬合(overfitting)——可一遇到新東西就毫無用處。這種劃分是讓我們對模型真實能力保持誠實的基本紀律。頭號鐵律:測試集必須始終封存。哪怕只在它上面調過一次參數,你報出來的分數就成了過分樂觀的虛構。

你有1萬張已標註的X光片。你在7000張上訓練,調試時觀察各個模型變體在留出的1500張上的表現,等最終選定模型後,才在最後那1500張上跑一次——把這個分數作為真實的準確率報告出去。

三堆封存的資料:在訓練集上學,在驗證集上選,在測試集上只評判一次。

劃分必須尊重資料本身的結構。對時間序列,要按日期劃分(過去用於訓練,未來用於測試);對成組的資料(同一位病人的許多照片),要把同一組整個留在一邊——否則測試集會洩露資訊,把模型襯托得過於好看。

又稱
data splittrain-test splitholdout set训练集/验证集/测试集训练/验证/测试集划分留出集