對于機器學習的模型選擇來說,即使隻是對于二進制分類,我們已經學習了很多方法,比如PLA,LR等;很多學習算法都是可疊代的,需要決定疊代次數;你可能還需要決定每一次疊代走多大,例如梯度下降;或者有很多的轉換可以選擇,例如線性、二次等;同時規則化又有很多的選擇L1,L2;再來規則化到底要加多強的λ。況且這些選擇是組合起來的,某種程度上來說是組合爆炸的,那麼我們怎麼做出正确的選擇?

那麼對于以上兩個模型,你會選擇哪一個模型呢?也許你會說,可以根據自己視覺上的判斷來選擇模型,但是我們必須注意到,當選擇的模型不是二進制的,而是多元的時候,我們就不能通過視覺上的判斷來選擇了。還有一點,如果通過視覺上的判斷來選擇,我們就必須考慮到自己腦袋裡那個強大的VC維模型,那麼我們就不見得有多大的好處。
如果以上方法不行的話 ,那我們是不是可以選一個Ein最小的方法呢?
我們可以把待選擇的模型跑在我們的資料上,那麼我們就可以通過選擇Ein最小的模型來完成機器學習。
那麼,這麼做有什麼問題呢?
首先,我們可以想象,在這樣的設定之下,我們肯定會選擇複雜度很高的模型,以減小Ein,就會可能造成overfitting(過拟合)。
其次,這樣選擇模型,相當于在1班中選擇一個最好的學生s1,在2班中選擇一個最好的學生s2,然後再選擇出s1和s2中相對較好的學生。這無疑增加了模型複雜度。
那我們可不可以通過選一個Etest最小的方法呢?通過一個測試集來判斷Etest的大小,進而選出較好的模型?
看起來這是一個很好的方法。但是問題是我們能找到測試資料嗎?這就好像測試考試,在正式考試之前,你會得到考卷嗎?
我們今天是要找到一個中間方式,就是把一部分資料先拿出來當作測試資料,以保證測試資料不被污染,當要進行驗證時,再把這部分資料拿出來進行測試!
我們選出K個資料用來進行驗證,這K個資料的誤差記作Eval,稱為驗證誤差,那麼剩下的N-K個資料用來訓練模型,記作Dtrain;
一般來說,K的值大約為整個資料集數量的五分之一。
K=N5