標籤:

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:機器學習 |