Train_Test_Split.md
在進行機器學習建模前,必須將資料集切分為訓練集與驗證集,目的是評估模型的泛化能力,防止過度擬合(overfitting)。常見的切分方式包括訓練集(training set)、驗證集(validation set)與測試集(test set)。
1. 為什麼要分訓練與驗證集?
訓練集:用於模型的學習與參數更新。
驗證集:用於調整超參數與評估訓練過程中的效能,幫助選擇最佳模型。
測試集(可選):在模型訓練完成後,用於最終評估其效能,模擬真實部署情境。
2. 分割方式與比例
常見分割比例為:
80% 訓練集 / 20% 驗證集
70% 訓練集 / 15% 驗證集 / 15% 測試集
Python 實作(使用 Scikit-Learn)
from sklearn.model_selection import train_test_split
X = data.drop("target", axis=1)
y = data["target"]
# 訓練集與驗證集分割
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
3. 注意事項
隨機性:使用
random_state
可確保實驗可重現。資料平衡:分類任務中,應考慮使用
stratify=y
以保持各類別比例一致。時序資料:應使用時間順序分割,避免資訊洩漏(data leakage)。
4. 延伸:交叉驗證(Cross-Validation)
為了更穩健地評估模型,可以採用 k-fold 交叉驗證,例如將資料分為 5 等份,輪流作為驗證集,其餘為訓練集,最終取平均效能。
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
scores = cross_val_score(model, X, y, cv=5)
print("平均準確率:", scores.mean())
交叉驗證能有效減少單一切分結果的偶然性,是常見的模型驗證方法。
良好的資料切分策略是建立穩健模型的基石,能提升模型在未見資料上的表現。
Last updated