1. 程式人生 > >機器學習 資料集劃分 訓練集 驗證集 測試集

機器學習 資料集劃分 訓練集 驗證集 測試集

機器學習資料探勘之資料集劃分: 訓練集 驗證集 測試集

Q:將資料集劃分為測試資料集和訓練資料集的常用套路是什麼呢?

A:three ways shown as follow:



1.像sklearn一樣,提供一個將資料集切分成訓練集和測試集的函式:
預設是把資料集的75%作為訓練集,把資料集的25%作為測試集。


2.交叉驗證(一般取十折交叉驗證:10-fold cross validation)
k個子集,每個子集均做一次測試集,其餘的作為訓練集。
交叉驗證重複k次,每次選擇一個子集作為測試集,並將k次的平均交叉驗證識別正確率作為結果。



3.訓練資料,驗證資料(注意區別交叉驗證資料集),測試資料(在Coursera上提到)


一般做預測分析時,會將資料分為兩大部分。一部分是訓練資料,用於構建模型,一部分是測試資料,用於檢驗模型。但是,有時候模型的構建過程中也需要檢驗模型,輔助模型構建,所以會將訓練資料在分為兩個部分:1)訓練資料;2)驗證資料(Validation Data)。驗證資料用於負責模型的構建。典型的例子是用K-Fold Cross Validation裁剪決策樹,求出最優葉節點數,防止過渡擬合(Overfitting)。
所以:
訓練資料(Test Data):用於模型構建
驗證資料(Validation Data):可選,用於輔助模型構建,可以重複使用。
測試資料(Test Data):用於檢測模型構建,此資料只在模型檢驗時使用,用於評估模型的準確率。絕對不允許用於模型構建過程,否則會導致過渡擬合。

區別

類別 驗證集 測試集
是否被訓練到
作用 純粹用於調超引數 純粹為了加試以驗證泛化效能
使用次數 多次使用,以不斷調參 僅僅一次使用
缺陷 模型在一次次重新手動調參並繼續訓練後所逼近的驗證集,可能只代表一部分非訓練集,導致最終訓練好的模型泛化效能不夠 測試集為了具有泛化代表性,往往資料量比較大,測試一輪要很久,所以往往只取測試集的其中一小部分作為訓練過程中的驗證集
互相轉化 驗證集具有足夠泛化性(一般來說,如果驗證集足夠大到包括大部分非訓練集時,也等於具有足夠泛化性了) 驗證集具有足夠泛化性時,測試集就沒有存在的必要了
類比 校內答辯(如果校內答辯比多校聯合答辯還有泛化性說服力,那麼就沒有必要再搞個多校聯合答辯了) 多校聯合公開答辯

附言

說到底:

  • 驗證集是一定需要的;
  • 如果驗證集具有足夠泛化代表性,是不需要再整出什麼測試集的;
  • 整個測試集往往就是為了在驗證集只是非訓練集一個小子集的情況下,好奇一下那個靠訓練集(訓練)和驗證集(調參)多次接力訓練出來的模型是不是具有了泛化效能,因而加試一下圖個確定。


references
http://www.cnblogs.com/bourneli/archive/2013/03/11/2954060.html
http://blog.csdn.net/lhx878619717/article/details/49079785
http://blog.csdn.net/chloezhao/article/details/53502674
https://segmentfault.com/q/1010000005917400