top of page

使用的方法介紹:

交叉檢驗---訓練數據,驗證數據和測試數據

最近在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%左右。

 

數據的處理過程:

1.根據數據的不同特徵值,分別在同一特徵值中隨機分成五份,抽取第一個特徵值中的第一份數據和第二個特徵值中的第一份數據合併成同一個數據作為test,其餘的不同特徵值的四份作為另外一份數據為train。並且我們以此類推,由此得到五筆數據量,每一筆都含有一份test數據和train數據。

2.從train中找出5筆 ,10筆,20筆,40筆相關性係數最高的,再從test中抽取相同的列數進行數據的測試,從而得到準確率分析。

我們實驗的最終目的是希望在分析大筆數據的時候,能用不同的係數類型進行分析,並取其中較為少量的數據,用該數據分析測試以得到較高的準確率(準確率應與原始測試數據相差無幾),提高分析的效率。

 

因此我們目前用splice數據來驗證我們的設想,並且最後取得了我們所設想的狀態,數據如下圖所示:

 

Splice.train建立model,用test進行數據測試:

 

 

 

 

 

 

 

 

 

 

 

自己的數據對自己進行測試的準確率為多少

 

 

 

 

 

 

 

從train中找出5筆 ,10筆,20筆,40筆相關性係數最高的,再從test中抽取相同的列數進行數據的測試,從而得到準確率分析。

Splice5筆相關係數最高的:

 

 

 

 

 

 

 

 

 

 

 

Splice10筆相關係數最高的:

 

 

 

 

 

 

 

 

 

 

 

Splice20筆相關係數最高的:

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

Splice40筆相關係數最高的:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上所得到的準確率都比自身所測試的數據得到的準確率要好,並且能在較高的一個範圍,有得到我們想要所呈現的狀態。

 

自己和自己的相關性係數最高的測試:5筆,10筆,20筆,40筆

 

 

 

 

 

 

 

 

 

 

 

 

 

另外一組GalNAc的数据:

1.根據數據的不同特徵值,分別在同一特徵值中隨機分成五份,抽取第一個特徵值中的第一份數據和第二個特徵值中的第一份數據合併成同一個數據作為test,其餘的不同特徵值的四份作為另外一份數據為train。並且我們以此類推,由此得到五筆數據量,每一筆都含有一份test數據和train數據。

2.從train中找出5筆 ,10筆,20筆,40筆相關性係數最高的,再從test中抽取相同的列數進行數據的測試,從而得到準確率分析。

我們實驗的最終目的是希望在分析大筆數據的時候,能用不同的係數類型進行分析,並取其中較為少量的數據,用該數據分析測試以得到較高的準確率(準確率應與原始測試數據相差無幾),提高分析的效率。

 

因此我們目前來驗證我們的設想,並且最後取得了我們所設想的狀態

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bottom of page