最近在Coursera上學習Data Analysis課程,課程論壇中有個帖子針對交叉檢驗(Cross Validation)中訓練數據集(train dataset),驗證數據集(Validate dataset)和測試數據集(test dataset)展開討論,內容挺好的,記錄到這里,作為備忘。
交叉檢驗(Cross Validation)
在數據分析中,有些算法需要利用現有的數據構建模型,比如貝葉斯分類器,決策樹,線性回歸等,這類算法統稱為監督學習(Supervisied Learning)算法。構建模型需要的數據稱之為訓練數據(Train Data)。
模型構建完后,需要利用數據驗證模型的正確性,這部分數據被稱為測試數據(Test Data)。測試數據不能用於模型構建之中,只能用於最后檢驗模型的准確性。
訓練數據,驗證數據和測試數據
一般做預測分析時,會將數據分為兩大部分。一部分是訓練數據,用於構建模型,一部分是測試數據,用於檢驗模型。但是,有時候模型的構建過程中也需要檢驗模型,輔助模型構建,所以會將訓練數據在分為兩個部分:1)訓練數據;2)驗證數據(Validation Data)。驗證數據用於負責模型的構建。典型的例子是用K-Fold Cross Validation裁剪決策樹,求出最優葉節點數,防止過渡擬合(Overfitting)。下面形式的描述一下前面提到的3類數據:
- 訓練數據(Test Data):用於模型構建
- 驗證數據(Validation Data):可選,用於輔助模型構建,可以重復使用。
- 測試數據(Test Data):用於檢測模型構建,此數據只在模型檢驗時使用,用於評估模型的准確率。絕對不允許用於模型構建過程,否則會導致過渡擬合。
K次交叉檢驗(K-Fold Cross Validation)
K次交叉檢驗的大致思想是將數據大致分為K個子樣本,每次取一個樣本作為驗證數據,取余下的K-1個樣本作為訓練數據。模型構建后作用於驗證數據上,計算出當前錯誤率。重復K次,將K次錯誤率平均,得到一個總體的錯誤率。可以通過整體錯誤率,估計當前整體數據用於建模的錯誤率。
舉個例子,K = 10(常見情況),求出總體錯誤率為8.7%。那么將當前的所有數據全部作為訓練數據,得到的模型的錯誤率90%的可能在9.7%左右。
參考資料
- 交叉驗證Wik:ihttp://zh.wikipedia.org/wiki/%E4%BA%A4%E5%8F%89%E9%A9%97%E8%AD%89
- Data Analysis on Coursera:https://class.coursera.org/dataanalysis-001/forum/thread?thread_id=2901