交叉驗證(Cross Validation)

假設我們需要從某些候選模型中選擇最適合某個學習問題的模型,我們該如何選擇?以多元迴歸模型爲例:,應該如何確定k的大小,使得該模型對解決相應的分類問題最爲有效?如何在偏倚(bias)和方差(variance)之間尋求最佳的平衡點?更進一步,我們同樣需要知道如何在加權迴歸模型中選擇適當的波長參數,或者在基於範式的SVM模型中選擇適當的參數C?

我們假設模型集合爲有限集,我們的目的就是從這d個模型中,選擇最有效的模型。

假設樣本集爲S,根據經驗風險最小化原則(ERM),可能會使用這樣的算法

1.在S上訓練每個模型,得到相應的假設函數

2.選擇訓練誤差最小的假設函數,即爲我們需要的函數。

然而,這樣的算法實際上並不有效。以多元迴歸模型爲例,指數越高,對樣本集S的擬合就越準確,這樣雖然保證了較低的訓練誤差,但是這種方法會使泛化誤差變得很大,因此,這並不是一個好的方法。

簡單交叉驗證

下面介紹一種方法,稱爲簡單交叉驗證(simple cross validation)

隨機將S分爲(例如70%的樣本)和(剩下30%的樣本),這裏稱作簡單交叉驗證集;

1.在上訓練每個模型,得到相應的假設函數
2.將每個假設函數通過交叉驗證集進行驗證,選擇使得訓練誤差最小的

3.通過簡單交叉驗證,可以得到每個假設函數的真實的泛化誤差,從而可以選擇泛化誤差最小的那個假設函數。

通常,預留1/4-1/3的樣本作爲交叉驗證集,而剩下的作爲訓練集使用。

步驟3也可以替換成這樣的操作:選擇相應的模型,使得訓練誤差最小,然後在用對整個樣本集S進行訓練。使用這樣的方法原因是有的學習算法對於初試的條件非常敏感,因此,他也許在上表現良好,但是在整個樣本集中卻存在很大的誤差,因此需要再次帶入整個樣本集進行驗證。

簡單交叉驗證的不足之處在於:此方法浪費了中的數據,即使我們將模型再次帶入整個樣本集,我們仍然只用了70%的樣本建模。如果樣本的採集非常的容易以致樣本量非常之大,使用交叉驗證方法沒有什麼問題;但如果樣本非常稀缺,採集困難,那麼我們就需要考慮一種能夠充分利用樣本的方法。

k-折交叉驗證

k-折交叉驗證將樣本集隨機劃分爲k份,k-1份作爲訓練集,1份作爲驗證集,依次輪換訓練集和驗證集k次,驗證誤差最小的模型爲所求模型。具體方法如下:

1.隨機將樣本集S劃分成k個不相交的子集,每個子集中樣本數量爲m/k個,這些子集分別記作

2.對於每個模型,進行如下操作:

for j=1 to k

作爲訓練集,訓練模型,得到相應的假設函數

再將作爲驗證集,計算泛化誤差

3.計算每個模型的平均泛化誤差,選擇泛化誤差最小的模型

K-折交叉驗證方法,每次留作驗證的爲總樣本量的1/k(通常取k=10),因此每次用於訓練的樣本量相應增加了,然而K-折交叉驗證對於每個模型都需要運行k次,他的計算成本還是較高的。
還有一種k-折交叉驗證的極端形式,當k=m時,即把樣本集S劃分爲m個子集,其中的m-1個樣本作爲訓練集,剩下1個樣本作爲驗證集,如此循環m次,選取驗證誤差最小的模型。
以上介紹的各種交叉驗證的方法,可用於模型的選擇,但也可以針對單個算法和模型進行評價。

小結:交叉驗證是一種模型選擇方法,其將樣本的一部分用於訓練,另一部分用於驗證。因此不僅考慮了訓練誤差,同時也考慮了泛化誤差。從這裏可以看出機器學習、數據挖掘與傳統統計學的一個重要差別:傳統統計學更注重理論,追求理論的完整性和模型的精確性,在對樣本建立某個特定模型後,用理論去對模型進行各種驗證;而機器學習/數據挖掘則注重經驗,如交叉驗證,就是通過不同模型在同一樣本上的誤差表現好壞,來選擇適合這一樣本的模型,而不去糾結理論上是否嚴謹。

發佈了24 篇原創文章 · 獲贊 38 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章