在機器學習和深度學習中,測試集的劃分比例需要根據數據量、任務類型和領域需求靈活調整。
1. 常規劃分比例
通用場景
- 訓練集 : 驗證集 : 測試集 = 60% : 20% : 20%
適用于大多數中等規模數據集(如數萬到數十萬樣本),平衡了訓練數據量和評估的可靠性。
大數據場景
- 訓練集 : 驗證集 : 測試集 = 98% : 1% : 1%
當數據量極大時(如百萬級以上),測試集比例可大幅降低,因為少量樣本已足夠評估模型性能(例如 ImageNet 使用約 120 萬訓練圖像,5 萬驗證圖像)。
小數據場景
- 訓練集 : 測試集 = 80% : 20%
若數據量極小(如幾百到幾千樣本),可省略驗證集,直接劃分訓練集和測試集,并通過交叉驗證(如 K 折交叉驗證)調參。
2. 關鍵影響因素
數據量大小
- 數據量越大,測試集比例可越低(如 5%-10%),因為絕對數量已足夠保證統計顯著性。
- 數據量越小,測試集比例需更高(如 20%-30%),但可能犧牲訓練數據量,此時推薦交叉驗證。
任務復雜度
- 簡單任務(如二分類):測試集比例可略低(10%-15%)。
- 復雜任務(如目標檢測、NLP):測試集比例需更高(20%-30%),以覆蓋更多場景。
數據分布
- 類別不均衡:需采用分層抽樣(Stratified Sampling),確保測試集的類別分布與原始數據一致。
- 時間序列數據:按時間順序劃分(如訓練集用歷史數據,測試集用最新數據),而非隨機劃分。
3. 特殊場景與技巧
交叉驗證替代固定劃分
- 小數據集:使用 K 折交叉驗證(如 5 折或 10 折),將訓練集分為 K 個子集,輪流作為驗證集,最大化數據利用率。
- 示例:
from sklearn.model_selection import KFold kf = KFold(n_splits=5) for train_idx, val_idx in kf.split(X):X_train, X_val = X[train_idx], X[val_idx]# 訓練和驗證
領域特定需求
- 醫學/金融數據:因數據獲取成本高,測試集可能僅占 10%-15%,但需確保樣本代表性。
- 自動駕駛/工業檢測:測試集需覆蓋更多邊緣案例(如罕見場景),比例可能提高到 25%-30%。
4. 經驗總結
數據量規模 | 推薦測試集比例 | 典型劃分方式 |
---|---|---|
極小(<1k 樣本) | 20%-30% | 訓練集 + 測試集 + 交叉驗證 |
小(1k-10k 樣本) | 15%-20% | 訓練集 (70%) + 驗證集 (10%) + 測試集 (20%) |
中等(10k-1M 樣本) | 10%-15% | 訓練集 (80%) + 驗證集 (10%) + 測試集 (10%) |
大(>1M 樣本) | 1%-5% | 訓練集 (98%) + 驗證集 (1%) + 測試集 (1%) |
5. 注意事項
- 測試集的“不可見性”
測試集僅用于最終評估,不可參與調參或模型選擇,否則會導致數據泄露,高估模型性能。 - 數據增強的影響
若對訓練集進行數據增強,測試集需保持原始分布,避免增強操作干擾評估結果。 - 領域適配性
在特定領域(如醫療、金融),測試集需包含與實際應用場景一致的樣本。
實際案例參考
- MNIST 手寫數字分類(6萬訓練樣本 + 1萬測試樣本):測試集占 ~14%。
- ImageNet 圖像分類(128萬訓練圖像 + 5萬驗證圖像):測試集占 ~3.7%。
- Kaggle 比賽:通常提供固定測試集(如 50% 數據),剩余用于訓練和驗證。