假設我們需要從某些候選模型中選擇最適合某個學習問題的模型,我們該如何選擇?以多元回歸模型為例:
我們假設模型集合為有限集
假設樣本集為s,根據經驗風險最小化原則(erm),可能會使用這樣的演算法:
1.在s上訓練每個模型
2.選擇訓練誤差最小的假設函式,即為我們需要的函式。
然而,這樣的演算法實際上並不有效。以多元回歸模型為例,指數越高,對樣本集s的擬合就越準確,這樣雖然保證了較低的訓練誤差,但是這種方法會使泛化誤差變得很大,因此,這並不是乙個好的方法。
簡單交叉驗證
下面介紹一種方法,稱為簡單交叉驗證(****** cross validation):
隨機將s分為
1.在2.將每個假設函式通過交叉驗證集
3.通過簡單交叉驗證,可以得到每個假設函式
通常,預留1/4-1/3的樣本作為交叉驗證集,而剩下的作為訓練集使用。
步驟3也可以替換成這樣的操作:選擇相應的模型
簡單交叉驗證的不足之處在於:此方法浪費了
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次,選取驗證誤差最小的模型。
以上介紹的各種交叉驗證的方法,可用於模型的選擇,但也可以針對單個演算法和模型進行評價。
小結:交叉驗證是一種模型選擇方法,其將樣本的一部分用於訓練,另一部分用於驗證。因此不僅考慮了訓練誤差,同時也考慮了泛化誤差。從這裡可以看出機器學習、資料探勘與傳統統計學的乙個重要差別:
傳統統計學更注重理論,追求理論的完整性和模型的精確性,在對樣本建立某個特定模型後,用理論去對模型進行各種驗證;而機器學習/資料探勘則注重經驗,如交叉驗證,就是通過不同模型在同一樣本上的誤差表現好壞,來選擇適合這一樣本的模型,而不去糾結理論上是否嚴謹。
機器學習 交叉驗證
交叉驗證是最好的測試方法 乙個問題叫做交叉驗證,是指假設要將乙份資料拆分成訓練集和測試集,這個時候怎麼評估出它的誤差?交叉驗證是把集合拆成五份,取四份做訓練集 乙份做測試集,並且每次選擇不同的那乙份做測試級,最後測出五個結果再做平均,這被認為是最好的測試方法。交叉驗證確實是乙個還不錯的驗證的方法,但...
機器學習 KFold交叉驗證
section i brief introduction on stratifiedkfold from sebastian raschka,vahid mirjalili.python機器學習第二版.南京 東南大學出版社,2018.section ii code and analyses from...
機器學習筆記6 交叉驗證
k折的資料集是訓練集,而不是所有資料,它將訓練集分為兩塊來訓練和驗證。可通過簡單的方式隨機化 sklearn k 折 cv 中的事件,就是將 shuffle 標誌設定為 true。之後,將從如下所示 cv kfold len x 2 變為如下所示 cv kfold len x 2,shuffle t...