機器學習中的train valid test以及交叉驗證


參考博客:http://blog.csdn.net/u010167269/article/details/51340070

在以前的網絡訓練中,有關於驗證集一直比較疑惑,在一些機器學習的教程中,都會提到,將數據集分為三部分,即訓練集,驗證集與測試集,但是由於工作中涉及到的都是神經網絡的訓練,大部分的情況是將數據集分為train以及test兩部分,直接用train set進行網絡的訓練,test set進行accuracy的測試,最后在選取accuracy最高的迭代次數所對應的模型使用,一直延續的就是這樣一個套路,對於驗證集的疑惑一直沒有得到解決。

 

今天看到了一篇博客,對於這個問題的分析較為透徹,我才弄明白了一點,下面是自己的一點理解,寫在這里,供以后查閱,也希望看到的網友們能夠給我指點錯誤,共同學習。

 

首先要明確的一點是,驗證集以及交叉驗證是用於模型選取過程中的,而不是模型訓練過程中的!

我的疑問產生的原因是,我沒有完整的走完整個機器學習的全過程,正常情況下,采用機器學習的方法解決一個實際問題的過程應該大致包括以下幾個步驟:問題抽象-》模型選擇-》模型訓練-》模型應用。但是由於我一開始接觸機器學習就是神經網絡方面的東西,通常都是拿到一個公認的性能比較好的網絡模型,用自己的數據集進行訓練,調整模型的參數,使該模型適用與我們當前的數據集。這樣的一個過程實際上相當於承認了我所選擇的神經網絡的網絡架構是一個“最優”的模型了(這個“最優”是大牛們驗證得到的結果),將“問題抽象-》模型選擇”這兩個步驟都省略掉了(大牛們替我做過了),只做了后面的兩個步驟,那么此時根本就沒有模型選取的過程,也就沒有采用驗證集的必要性了,這也就是我為什么沒有見過驗證集出現的原因了。

 

明確了上面的原因之后,那么驗證集以及交叉驗證等方法就可以按照下面的過程進行理解了:

1、有一個實際問題需要用機器學習的方式進行求解,首先對該問題進行數學上的抽象(用數學語言進行描述,向量化特征表示等過程);

2、對於該問題,采取機器學習的方式進行解決的話,有n個可供選擇的模型model1, model2,......modeln(比如這n個模型可以是不同階次的擬合多項式);

3、將我們所擁有的數據集分為三部分(數據集重組的前提下,不充足的時候則用交叉驗證的手段),分別對這n個模型的性能進行評估,得到“最優”的模型modelk;

4、將所有數據都用作訓練集,對modelk進行訓練,得到modelk的最優參數。

 

總結一句,就是驗證集合是在沒有確定什么模型最優的時候采用的,確定下來之后,就可以將所有的數據集都用作訓練,得到最優的模型參數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM