模型驗證 — 完整課堂筆記
來源: 數據科學 · 模塊 3 — 模型驗證 · Coursera · Andrew Park · 46 分鐘講座
為何拆分數據
影片- 目標: 估計模型在從未見過的數據上的表現 —— 唯一重要的指標。
- 失敗模式: 只在訓練集上評分時每個模型都看起來很棒 —— 包括糟糕的。
- 留出原則: 任何決策(模型選擇、超參數)都不能在最終評估前使用測試集。
- 為何不只是多訓練: 訓練集準確率受模型容量限制;它對泛化沒有任何信息。
- 教授的比喻: 「用訓練準確率就像給自己的作文打分」—— 14:48 時間戳。
三路拆分
影片- 訓練集: 用學習算法擬合模型參數。
- 驗證集: 用來調超參數和在模型間選擇 —— 多次接觸。
- 測試集: 最後只用一次,估計真實世界表現。
- 為何 3 個不是 2 個: 如果在測試集上調,它就變成第二個訓練集 —— 對泛化會過度自信。
- 常見錯誤: 看測試集分數再回去調模型 —— 這會讓測試集失效。
典型拆分比例
影片- 70/15/15: 中等數據集的默認(1k–10萬樣本)。
- 80/10/10: 1 萬–10 萬樣本可用且訓練集會做 CV 時常見。
- 大數據 98/1/1: 100 萬+ 樣本時 1% 仍然是 1 萬 —— 足以穩定估計。
- 小數據替代: 1 千以下樣本時,用交叉驗證而不是固定驗證集。
分層
影片- 何時: 目標有類別不平衡或稀有事件時,用分層採樣。
- 如何: 在 train/val/test 拆分中保留類別比例 —— 防止驗證集偶然 0 正例。
- 工具: sklearn 的 StratifiedKFold 或 train_test_split(stratify=y)。
- 連續 y: 回歸任務把目標分位數化再分層。
交叉驗證(課節 3.3 預告)
影片- k 折 CV: 把訓練集分成 k 份;在 k-1 上訓練、1 上驗證;輪換;平均 k 個分數。
- 典型 k: 5 或 10 —— 多數場景超過 10 收益遞減。
- 留一: k = n;估計方差極高但無偏;只在極小數據集上用。
- 分層 k 折: 每折保留類別比例 —— 分類問題的默認選擇。
- 時間序列 CV: 擴展窗或滾動窗拆分;絕不在未來數據上訓練。
過擬合(時間戳 31:20)
影片- 定義: 模型記住訓練集噪聲而不是學習信號。
- 信號: 訓練準確率上升時驗證準確率持平或下降。
- 原因: 樣本相對模型容量太少、特徵太多、無正則化、無早停。
- 修複: 更多數據、更簡單模型、L1/L2 正則、dropout、早停、數據增強。
- 診斷: 畫訓練 vs 驗證準確率隨 epoch 的圖 —— 曲線分叉 = 過擬合。
數據泄露(進階)
影片- 預處理陷阱: 在完整數據集(含 val/test)上擬合 scaler/imputer —— 泄露分布信息。
- 修複: 把預處理放進 Pipeline 內做交叉驗證,驗證數據永遠不在擬合期間被看到。
- 目標泄露: 從目標派生的特徵(如目標是調查結果時的「調查後天數」)→ 不真實的準確率。
- 時序泄露: 用未來數據預測過去 —— 時間序列常見;用合適的滾動拆分。
推演例
影片- 設定: 1 萬樣本,二分類,70/15/15 拆分。
- 數量: 訓練 = 7,000;驗證 = 1,500;測試 = 1,500。
- 分層: 若類別比 80/20,每個拆分保留這個比例 —— 訓練集 5,600 負 / 1,400 正。
- 流水線: 在訓練集上擬合 scaler → 用同一個 scaler 變換 val/test;絕不重擬合。
- 最終模型: 在 val 上調好後,再在 train+val 上重訓,報告一個測試數字。






