參考博客:http://blog.csdn.net/u010167269/article/details/51340070網絡
在之前的網絡訓練中,有關於驗證集一直比較疑惑,在一些機器學習的教程中,都會提到,將數據集分爲三部分,即訓練集,驗證集與測試集,可是因爲工做中涉及到的都是神經網絡的訓練,大部分的狀況是將數據集分爲train以及test兩部分,直接用train set進行網絡的訓練,test set進行accuracy的測試,最後在選取accuracy最高的迭代次數所對應的模型使用,一直延續的就是這樣一個套路,對於驗證集的疑惑一直沒有獲得解決。架構
今天看到了一篇博客,對於這個問題的分析較爲透徹,我才弄明白了一點,下面是本身的一點理解,寫在這裏,供之後查閱,也但願看到的網友們可以給我指點錯誤,共同窗習。機器學習
首先要明確的一點是,驗證集以及交叉驗證是用於模型選取過程當中的,而不是模型訓練過程當中的!性能
個人疑問產生的緣由是,我沒有完整的走完整個機器學習的全過程,正常狀況下,採用機器學習的方法解決一個實際問題的過程應該大體包括如下幾個步驟:問題抽象-》模型選擇-》模型訓練-》模型應用。可是因爲我一開始接觸機器學習就是神經網絡方面的東西,一般都是拿到一個公認的性能比較好的網絡模型,用本身的數據集進行訓練,調整模型的參數,使該模型適用與咱們當前的數據集。這樣的一個過程實際上至關於認可了我所選擇的神經網絡的網絡架構是一個「最優」的模型了(這個「最優」是大牛們驗證獲得的結果),將「問題抽象-》模型選擇」這兩個步驟都省略掉了(大牛們替我作過了),只作了後面的兩個步驟,那麼此時根本就沒有模型選取的過程,也就沒有采用驗證集的必要性了,這也就是我爲何沒有見過驗證集出現的緣由了。學習
明確了上面的緣由以後,那麼驗證集以及交叉驗證等方法就能夠按照下面的過程進行理解了:測試
一、有一個實際問題須要用機器學習的方式進行求解,首先對該問題進行數學上的抽象(用數學語言進行描述,向量化特徵表示等過程);.net
二、對於該問題,採起機器學習的方式進行解決的話,有n個可供選擇的模型model1, model2,......modeln(好比這n個模型能夠是不一樣階次的擬合多項式);blog
三、將咱們所擁有的數據集分爲三部分(數據集重組的前提下,不充足的時候則用交叉驗證的手段),分別對這n個模型的性能進行評估,獲得「最優」的模型modelk;教程
四、將全部數據都用做訓練集,對modelk進行訓練,獲得modelk的最優參數。get
總結一句,就是驗證集合是在沒有肯定什麼模型最優的時候採用的,肯定下來以後,就能夠將全部的數據集都用做訓練,獲得最優的模型參數。