Training/Validation/Test Dataset
Training dataset: 用來擬合模型的數據集;
Validation dataset: 訓練過程中提供相對於train的無偏估計的數據集,同時用來調整超參數和特徵選擇,實際參與訓練;
Test dataset: 最終模型訓練好之後,用來提供相對於train+valid的無偏估計的數據集。
一、標準架構
data = load_data()train, validation, test = split(data)hyper_parameters = set_hyper()for hyper in hyper_parameters: model = fit(train, hyper) metrics = evaluate(model, validation) # compare metrics among different hypers best_hyper = update_best()# finallymodel = fit(train, best_hyper)metrics = evaluate(model, test)# show your final metrics
傳統機器學習方法可以做K-fold交叉驗證,這個時候就沒有顯式的Validation dataset了。
二、變種,引入交叉驗證
data = load_data()train, test = split(data)hyper_parameters = set_hyper()k = init_k_fold()for hyper in hyper_parameters: metrics = [] for index in range(k): fold_train, fold_valid = cv_split(index, k, train) model = fit(fold_train, hyper) current_metric = evaluate(model, fold_valid) metrics.append(current_metric) avg_metric = np.mean(metrics) std_metric = np.std(metrics) # compare metrics among different hypers best_hyper = update_best()# finallymodel = fit(train, best_hyper)metrics = evaluate(model, test)# show your final metrics
深度學習就不用交叉驗證了,因為數據量足夠大可以擬合一個複雜模型,使用train/valid/test標準架構就好。
Attention: 任何基於統計的預處理,都只能在train dataset上計算出各種統計量,然後應用到validation/test dataset,不能首先對整個數據集做預處理,然後劃分train/val/test!
如果你的樣本可以用時間來劃分,那麼一種可能的劃分方式:
1、train+valid: 2017-05之前的樣本集合;
2、test: 2017-05之後的樣本集合。
Reference:
difference-test-validation-datasets
推薦閱讀:
※使用Tensorflow C++ API自定義操作
※機器學習基石筆記14:正則化(Regularization)
※1-5 Unsupervised Learning
※乾貨 | 機器學習數學、概念及模型思維導圖
※1-3 What is Machine Learning
TAG:機器學習 |