
06 模型選擇與 Cross Validation為什么不能只做一次 Train/Test Split模型訓練完成以后我們通常會面臨一個問題Model A Model B Model C到底哪個模型更好或者max_depth 3 max_depth 5 max_depth 10哪個超參數更好這就是Model Selection 模型選擇而 Cross Validation 是模型選擇中最重要的方法之一。一、最簡單的 Train/Test Split最基本的方法是Dataset ↓ Train Set Test Set例如80% Train 20% TestTrain Set 用于訓練模型。Test Set 用于最終評估模型。這種方法簡單但是存在一個問題評估結果可能非常依賴這一次隨機劃分。二、一次劃分可能具有偶然性假設數據集并不大。第一次劃分Train Set 比較容易 Test Set 比較容易模型得到Accuracy 92%第二次劃分Test Set 恰好包含很多困難樣本模型可能只有Accuracy 84%那么92% 84%哪一個才更接近模型的真實泛化能力這就是單次劃分的問題。三、Cross Validation 的基本思想Cross Validation 中文通常稱為交叉驗證核心思想是不要只驗證一次而是讓不同樣本輪流進入驗證集。最常見的方法就是k-fold Cross Validation四、k-fold Cross Validation假設k 5把數據分成Fold 1 Fold 2 Fold 3 Fold 4 Fold 5第一次Train: Fold 2 Fold 3 Fold 4 Fold 5 Validation: Fold 1第二次Train: Fold 1 Fold 3 Fold 4 Fold 5 Validation: Fold 2一直重復到每一個 Fold 都作為一次 Validation Set五、5-fold Cross Validation可以表示為Round 1: [V][T][T][T][T] Round 2: [T][V][T][T][T] Round 3: [T][T][V][T][T] Round 4: [T][T][T][V][T] Round 5: [T][T][T][T][V]其中T Training V Validation最后得到五個分數0.88 0.91 0.87 0.90 0.89最終可以計算平均值Mean1k∑i1kScoreiMean\frac{1}{k}\sum_{i1}^{k}Score_iMeank1?i1∑k?Scorei?例如Mean0.880.910.870.900.8950.89Mean\frac{0.880.910.870.900.89}{5}0.89Mean50.880.910.870.900.89?0.89于是CV Score 0.89六、為什么 Cross Validation 更可靠因為每一個樣本都有機會作為 Training Data 同時也作為 Validation Data因此模型評估不會過度依賴某一次幸運或不幸運的數據劃分Cross Validation 能更穩(wěn)定地估計模型的generalization performance 泛化性能七、Cross Validation 不是 Test Set 的替代品這是非常重要的一點。標準流程應該是原始 Dataset ↓ Train / Test Split ↓ Train 部分內部 做 Cross Validation ↓ 選擇模型和超參數 ↓ 使用整個 Train Set 重新訓練 ↓ 最后只在 Test Set 上評估一次也就是說Cross Validation 用于模型選擇 Test Set 用于最終考試八、為什么不能反復使用 Test Set假設你不斷嘗試Model A Model B Model C Model D每次都查看 Test Accuracy。然后選擇 Test Accuracy 最高的模型。雖然模型沒有直接在 Test Set 上訓練但是你的模型選擇決策已經使用了 Test Set 的信息。這樣實際上就產生了Test Set Leakage最終的 Test Score 會變得過于樂觀。九、Validation Set 和 Test Set 的區(qū)別可以把整個數據劃分理解為Training Set → 學參數 Validation Set → 選模型、選超參數 Test Set → 最終評價而 k-fold Cross Validation 本質上就是在 Training Data 內部更加高效地構造多個 Validation Set。十、Cross Validation 如何用于模型選擇假設有兩個模型Model A Model B5-fold 結果Model A: 0.88 0.89 0.90 0.87 0.91 Model B: 0.90 0.92 0.86 0.91 0.89除了平均值還應該觀察波動。例如Mean Standard Deviation因為一個模型可能平均分高 但不同 Fold 波動非常大這說明模型穩(wěn)定性可能較差。十一、Cross Validation 可以用于選擇什么常見用途包括模型類型選擇 超參數選擇 特征選擇 預處理策略比較 閾值策略比較例如Decision Tree: max_depth 3 5 7 10對每一個參數執(zhí)行 5-fold CV。比較平均 F1。選擇表現最好的參數。十二、分類問題最好考慮 Stratified k-fold假設Positive 10% Negative 90%普通隨機劃分可能導致某一個 Fold 中Positive 特別少因此分類任務中常使用Stratified k-fold它盡量保證每個 Fold 中的類別比例 接近整體數據集對于類別不平衡問題尤其重要。十三、Cross Validation 也可能產生 Data LeakageCross Validation 并不是自動安全的。例如你在劃分 Fold 之前先使用整個數據集計算Normalization mean Feature scaling Feature selection PCA Missing value statistics那么 Validation Fold 的信息已經進入預處理過程。這仍然屬于Data Leakage正確流程應該是每一個 Fold 內 Train Fold → Fit preprocessing → Transform Train → Transform Validation 而不是 整個 Dataset → Fit preprocessing → 再 Cross Validation十四、時間序列不能隨便使用普通 k-fold對于時間序列2021 2022 2023 2024 2025如果使用普通隨機 k-fold可能出現用 2025 年的數據訓練 預測 2022 年這在真實部署場景中不合理。時間序列應該保持過去 → 未來因此需要使用Time-based Split Rolling Validation Walk-forward Validation十五、Cross Validation 的核心價值Cross Validation 的真正意義不是讓模型分數更高而是更可靠地估計模型對未知數據的泛化性能并降低一次隨機劃分帶來的偶然性。十六、總結一個規(guī)范的模型選擇流程可以概括為Dataset ↓ Train / Test Split ↓ Train Data ↓ k-fold Cross Validation ↓ 比較模型與超參數 ↓ 選擇最佳方案 ↓ 在全部 Train Data 上重新訓練 ↓ Test Set 最終評估下一篇將進一步討論一個實際問題k 到底應該選多少