假設我們需要從某些候選模型中選擇最適合某個學習問題的模型,我們該如何選擇?以多元迴歸模型爲例:,應該如何確定k的大小,使得該模型對解決相應的分類問題最爲有效?如何在偏倚(bias)和方差(variance)之間尋求最佳的平衡點?更進一步,我們同樣需要知道如何在加權迴歸模型中選擇適當的波長參數
,或者在基於
範式的SVM模型中選擇適當的參數C?
我們假設模型集合爲有限集,我們的目的就是從這d個模型中,選擇最有效的模型。
假設樣本集爲S,根據經驗風險最小化原則(ERM),可能會使用這樣的算法:
2.選擇訓練誤差最小的假設函數,即爲我們需要的函數。
然而,這樣的算法實際上並不有效。以多元迴歸模型爲例,指數越高,對樣本集S的擬合就越準確,這樣雖然保證了較低的訓練誤差,但是這種方法會使泛化誤差變得很大,因此,這並不是一個好的方法。
簡單交叉驗證
下面介紹一種方法,稱爲簡單交叉驗證(simple cross validation):
隨機將S分爲(例如70%的樣本)和
(剩下30%的樣本),這裏
稱作簡單交叉驗證集;
1.在上訓練每個模型
,得到相應的假設函數
;
2.將每個假設函數通過交叉驗證集進行驗證,選擇使得訓練誤差
最小的
;
3.通過簡單交叉驗證,可以得到每個假設函數的真實的泛化誤差,從而可以選擇泛化誤差最小的那個假設函數。
通常,預留1/4-1/3的樣本作爲交叉驗證集,而剩下的作爲訓練集使用。
步驟3也可以替換成這樣的操作:選擇相應的模型
簡單交叉驗證的不足之處在於:此方法浪費了中的數據,即使我們將模型再次帶入整個樣本集,我們仍然只用了70%的樣本建模。如果樣本的採集非常的容易以致樣本量非常之大,使用交叉驗證方法沒有什麼問題;但如果樣本非常稀缺,採集困難,那麼我們就需要考慮一種能夠充分利用樣本的方法。
k-折交叉驗證
k-折交叉驗證將樣本集隨機劃分爲k份,k-1份作爲訓練集,1份作爲驗證集,依次輪換訓練集和驗證集k次,驗證誤差最小的模型爲所求模型。具體方法如下:
1.隨機將樣本集S劃分成k個不相交的子集,每個子集中樣本數量爲m/k個,這些子集分別記作;
for j=1 to k
K-折交叉驗證方法,每次留作驗證的爲總樣本量的1/k(通常取k=10),因此每次用於訓練的樣本量相應增加了,然而K-折交叉驗證對於每個模型都需要運行k次,他的計算成本還是較高的。
還有一種k-折交叉驗證的極端形式,當k=m時,即把樣本集S劃分爲m個子集,其中的m-1個樣本作爲訓練集,剩下1個樣本作爲驗證集,如此循環m次,選取驗證誤差最小的模型。
以上介紹的各種交叉驗證的方法,可用於模型的選擇,但也可以針對單個算法和模型進行評價。
小結:交叉驗證是一種模型選擇方法,其將樣本的一部分用於訓練,另一部分用於驗證。因此不僅考慮了訓練誤差,同時也考慮了泛化誤差。從這裏可以看出機器學習、數據挖掘與傳統統計學的一個重要差別:傳統統計學更注重理論,追求理論的完整性和模型的精確性,在對樣本建立某個特定模型後,用理論去對模型進行各種驗證;而機器學習/數據挖掘則注重經驗,如交叉驗證,就是通過不同模型在同一樣本上的誤差表現好壞,來選擇適合這一樣本的模型,而不去糾結理論上是否嚴謹。