機器學習基石15:交叉驗證(Cross Validation)

本文介紹了機器學習學習訓練過程中的驗證策略。包括留一法交叉驗證和V-折交叉驗證。


系列文章

機器學習基石01:機器學習簡介
機器學習基石02:感知器算法(Perceptron Algorithm)
機器學習基石03:機器學習的類型(Types of ML)
機器學習基石04:機器學習的可行性(Feasibility of ML)
機器學習基石05:訓練與測試(Training versus Testing)
機器學習基石06:泛化理論(Theory of Generalization)
機器學習基石07:VC維(The VC Dimension)
機器學習基石08:噪聲和誤差(Noise and Error)
機器學習基石09:線性迴歸(Linear Regression)
機器學習基石10:邏輯迴歸(Logistic Regression)
機器學習基石11:線性模型分類(Linear Models for Classification)
機器學習基石12:非線性變換(Nonlinear Transformation)
機器學習基石13:過擬合風險(Hazard of Overfitting)
機器學習基石14:正則化(Regularization)
機器學習基石15:交叉驗證(Cross Validation)
機器學習基石16:三個重要原則(Three Learning Principles)



15.Validation

上節課介紹了抑制過擬合(overfitting)的方法–正則化(Regularization),通過引入正則化項,將最小化目標函數 EinE_{in} 轉化爲 EaugE_{aug} ,限制高階項的權重來減少模型複雜度,從而達到抑制過擬合的目的。還需要注意的一點是過擬合會導致模型泛化能力變差。一個模型有很多參數需要選擇,那麼應該如何選擇模型參數使得模型具有良好的泛化能力呢?這是本節課介紹的內容。

15.1 Model Selection Problem

以二元分類爲例,建模流程如下:

  • 首先,選擇算法 AA 。目前已經學習過的算法有:PLA, pocket,linear regression,logistic regression;
  • 其次,設置迭代次數 TT 。比如:100,1000,10000。在實踐過程中,一般常用的是epochs,即訓練輪數(讓算法看全部的訓練樣本多少輪);
  • 然後,設置學習率 η\eta。常用的有:0.0001,0.01,0.1,1;
  • 然後,選擇模型特徵轉換函數 Φ\Phi 。常用的有:線性,二次多項式( quadratic),十次多項式(poly-10),勒讓德十次多項式(Legendre-poly-10);
  • 再然後,選擇正則化方法 Ω(w)\Omega(w)。常用的有 L1正則化(稀疏正則化)和L2正則化(權重衰減正則化);
  • 最後,設置正則化項係數 λ\lambda (拉格朗日乘子)。常用的有:0(不設置正則化),0.01,1。

根據以上規則設計模型時,基本上不可能一次設計就是完全滿足自己業務需求的模型,還需要不斷嘗試不同的參數選擇和模型組合,找到最好的矩 gg ,以此作爲模型。(通過算法 AA,選擇一個最佳的假設(hypothesis)對應的函數稱爲 gggg 能最好地表示事物的內在規律,也是最終想要得到的模型表達式。)


接下來看模型選擇問題。

假設有 MM 個模型(假設空間):H1,H2,...,HMH_1,H_2, . . . ,H_M ,每一個都有相對應的算法:A1,A2,...,AMA_1,A_2, . . . ,A_M。目標是從這 MM 個假設空間中選出一個 HmH^{*}_m ,使用算法 AmA^{*}_m 在數據集 DD 上訓練,得到一個好的矩 gmg^{*}_m,使其 Eout(gm)E_{out}(g^{*}_m) 最小。問題的關鍵就是如何找到最好的矩 gmg^{*}_m。但是實際問題中,概率分佈 P(x)P(x)P(yx)P(y|x) 是未知的,因此 EoutE_{out} 也是未知的。顯然通過尋找最小的 EoutE_{out} 不可行。那麼有沒有其它可行的方法?

可以嘗試對 MM 個模型分別計算使得 EinE_{in} 最小的矩 gg ,再對比這些矩 gg,取其中能使 EinE_{in} 最小的 gmg^{*}_m 對應的假設函數 mm^{*} 作爲最終的模型。

在這裏插入圖片描述

但是 EinE_{in} 足夠小,並不代表模型是最好的,因爲可能存在過擬合。這種“選擇模型+訓練”的方式會導致 VC Dimention dVC(H1H2)d_{VC}(H_1∪H_2) 增大,從而使得模型複雜度增加,導致泛化性能變差。因此通過計算訓練樣本的 EinE_{in} 來選擇模型的策略也不合適。

既然訓練樣本不可行,那麼可不可以考慮使用訓練樣本之外的數據,然後使用以上思路進行運算,最後再做選擇?

在測試樣本上對 MM 個模型分別計算使得 EtestE_{test} 最小的矩 gg ,再對比這些矩 gg,選擇使得 EtestE_{test} 最小的矩 gmg^{*}_m 對應的假設函數 mm^{*} 即爲最佳模型:
在這裏插入圖片描述

這種測試集驗證的方法,根據霍夫丁不等式(finite­-bin Hoffding)不等式,可以得到:

在這裏插入圖片描述

在第七節課中講到了該不等式,公式中 O()O() 表示模型複雜度。由上式可知,若模型個數 MM 越少,且測試樣本數量 NtestN_{test} 越大,則模型複雜度 OO 越小,即 EtestE_{test}EoutE_{out} 越接近。但是目前這樣做是不可行的,因爲測試集是沒有的。那麼應該如何做?即我們熟知的,從訓練集中劃出一部分作爲驗證集,這就引出了下一小節的內容–驗證(Validation)。

下面比較一下這三種策略:
在這裏插入圖片描述
第一種策略以 EinE_{in} 作爲判斷基準,計算M個模型的使得 EinE_{in} 最小的矩gg 和從這 M 個矩gg 中選出最優的矩 gmg^{*}_m 的過程中,所使用的都是同樣的數據訓練樣本 DD,這就使得模型泛化能力不一定好(數據已經被模型學習過了,被“污染”了)。這相當於用平時做過的習題再出成試卷拿來考試,即使取得高分,也不能說明學習能力強。

第二種策略以 EtestE_{test} 作爲判斷基準,計算M個模型的使得 EtestE_{test} 最小的矩 gg 使用訓練集樣本,從這 M 個矩gg 中選出最優的矩 gmg^{*}_m 的過程中使用測試集樣本,相當於平時用練習題,考試用題型相同但題目不一樣的試卷進行考試,能更好的反應學生的學習能力。所以 EtestE_{test} 作爲判斷基準更合理。但是測試集是沒有的,只有訓練集 DD。所以,尋找一種折中的辦法,從已有的訓練集 DD 中劃出一部分 DvalD_{val} 作爲驗證集(validation set),其餘部分當做訓練集。這就是第三種策略。

第三種策略以 EvalE_{val}作爲判斷基準,通過最小化 EvalE_{val} ,從而選擇最優的矩 gmg^{*}_m


習題1:
在這裏插入圖片描述


15.2 Validation

關於訓練集和驗證集的劃分:在滿足獨立同分布(iid)的條件下, 從原來的包含 NN 個樣本的數據集 DD (此處更正,之前的課程未提到驗證集,一直稱 DD 爲訓練樣本,學已至此,這種稱呼是不準確的,應該稱爲“數據集”更合適)中劃分出一部分,作爲驗證集 DvalD_{val},其包含的樣本數量爲 KK,其對應的誤差即爲 EvalE_{val}。剩餘的樣本數據作爲訓練集 DtrianD{trian} ,其包含的樣本數量爲 NKN - K,M個模型均使用 DtrianD{trian} 訓練得到的最優的矩 gg,記爲 gmg^{-}_m
在這裏插入圖片描述

使用 gmg^{-}_mDvalD_{val} 進行驗證,得到如下的霍夫丁不等式:
在這裏插入圖片描述

有了霍夫丁不等式保證,接下來需要根據最小化 EvalE_{val}MM 個矩 gg 中選擇最優的矩 gmg^{-}_{m^{*}} 對應的假設函數 mm^{*} 作爲最終的模型:

在這裏插入圖片描述

因爲訓練樣本 DtrianD_{trian} 得到的最優的矩 gg 爲矩 gmg^{-}_{m^{*}} ,總的樣本 DD 得到的最優的矩 gg 爲矩 gmg_{m^{*}} ,由之前所學的學習曲線可知,訓練樣本越多,模型越精確,其假設函數越接近目標函數。即 DDEoutE_{out} 要比 DtrianD_{trian}EoutE_{out} 要小得多。
在這裏插入圖片描述

因此,常用做法是:以 EtrainE_{train} 作爲判斷標準,M個模型分別在訓練樣本 DtrianD_{trian} 上訓練得到最優的矩 gmg^{-}_m ;然後,以 EvalE_{val} 作爲判斷標準,在驗證集 DvalD_{val} 上進行驗證,即對比這 MM 個矩 gmg^{-}_m, 從中選出最優的矩 gmg^{-}_{m^{*}} 對應的假設函數作爲模型,使用該模型在總數據集 DD 上進行訓練,得到最終的 gmg_{m^{*}} 。算法計算思路和模型選擇流程圖如下所示:
在這裏插入圖片描述

下面通過一個例子直觀地說明這種模型選擇方法的優越性。使用交叉驗證從五階多項式假設空間到十階多項式假設空間之間選擇一個模型,做對比如下 :
在這裏插入圖片描述

左圖信息說明:

  • 橫軸:驗證集包含的樣本數 KK
  • 縱軸:預測輸出的誤差 EoutE_{out}
  • 黑線:不劃分驗證集,直接使用整個數據集訓練得到的最優的矩 gm^g_{\hat{m}}
  • 紅線:劃分驗證集,以 EtrainE_{train} 作爲判斷標準,M個模型分別在訓練樣本 DtrianD_{trian} 上訓練得到最優的矩 gmg^{-}_m ;然後,以 EvalE_{val} 作爲判斷標準,在驗證集 DvalD_{val} 上進行驗證,即對比這 MM 個矩 gmg^{-}_m, 從中選出最優的矩 gmg^{-}_{m^{*}}
  • 藍線:更進一步,使用矩 gmg^{-}_{m^{*}} 對應的假設函數作爲模型,在總數據集 DD 上進行訓練,得到最終的 gmg_{m^{*}}

由以上可知,Eout(gm)Eout(gm)E_{out}(g_{m^{*}}) ≤ E_{out}(g^{-}_{m∗}) ,藍色線所代表的策略選出的模型性能更好。當驗證集樣本數量 KK 大於一定的值時,紅線會超過黑線。這是因爲隨着驗證集樣本數量 KK 的增大,訓練集樣本數量 NKN-K 減少,得到的假設函數(模型)越來越差,即對應的 EoutE_{out} 會增大,當 KK 繼續增大時,比在整個數據集上訓練得到的模型更差。

關於驗證集樣本數量 KK 的選擇問題:
在這裏插入圖片描述

當驗證集樣本數量 KK 很大時,Eval(g)Eout(g)E_{val}(g^{-}) \approx E_{out}(g^{-}) ,但因爲訓練集樣本數量 NKN-K 減少,導致 Eout(g)E_{out}(g)Eout(g)E_{out}(g^{-}) 相差很大;當 KK 比較小時, Eout(g)Eout(g)E_{out}(g) \approx E_{out}(g^{-}),但Eval(g)E_{val}(g^{-})Eout(g)E_{out}(g^{-}) 相差很大。所以有個折中的辦法,通常設置 K=N5K = \frac{N}{5} 。劃分驗證集,通常會減少時間複雜度,因爲 DtrainD_{train} 變小了。


習題2:
在這裏插入圖片描述


15.3 Leave-One-Out Cross Validation

上小節提到了驗證集,先考慮一個極端的例子,每次將數據集 DD 中的一個樣本(KK = 1)作爲驗證集來求解矩 gng_n ,即驗證集 Dval(n)={(xn,yn)}D^{(n)}_{val} = \{(x_n,y_n) \} 。這種方法的缺點是 EvalE_{val}EoutE_{out} 可能相差很大。爲了減小 EvalE_{val}EoutE_{out} 之間的差距,引入留一法交叉驗證(Leave-One-Out Cross Validation)

顧名思義,留一法交叉驗證,即每次從數據集 DD 中取一個樣本作爲驗證集,直到所有樣本都做過驗證集,共計算 NN 次,最後對驗證誤差求平均,得到 Eloocv(H,A)E_{loocv}(H,A)
在這裏插入圖片描述

這樣做的目的使使得 Eloocv(H,A)Eout(g)E_{loocv}(H,A) ≈ E_{out}(g)

下面通過一個直觀的例子說明留一法交叉驗證。分別使用線性模型和常數模型對二維平面上的三個樣本點做擬合,使用留一法交叉驗證。這兩種模型對應的 Eloocv(H,A)E_{loocv}(H,A) 求解結果如下:
在這裏插入圖片描述

每次將一個樣本點作爲驗證集,其他兩個樣本點作爲訓練集,最後將得到的驗證誤差求平均值,得到 Eloocv(linear)E_{loocv}(linear)Eloocv(constant)E_{loocv}(constant),值較小的 EloocvE_{loocv} 所對應的模型即爲最佳模型。
在這裏插入圖片描述

由此可知,常數模型比線性模型錯誤率更低,因爲複雜度更低。那麼Eloocv(H,A)E_{loocv}(H,A) 與 總體平均的Eout(g)E_{out}(g) 近似嗎?下面從理論的角度證明 Eloocv(H,A)E_{loocv}(H,A) 與總體平均 Eout(g)E_{out}(g) 的關係。假設有不同的數據集 DD,其期望分佈爲 εD\varepsilon_D
在這裏插入圖片描述

由以上分析可知,Eloocv(H,A)E_{loocv}(H,A) 與 總體平均的Eout(g)E_{out}(g) 近似,這表示留一法交叉驗證是可行的。下例通過手寫數字識別進行說明:
在這裏插入圖片描述

藍色表示數字"1"的樣本,紅色表示數字"1"之外的樣本,以對稱性(symmetry)和密度(intensity)爲樣本的特徵值,中間的圖爲以 EinE_{in} 作爲優化目標求出的分類超平面,很不平滑;右圖爲以 Eloocv(H,A)E_{loocv}(H,A) 作爲優化目標求出的分類超平面,平滑很多。繪製特徵數量與誤差之間的關係曲線:
在這裏插入圖片描述

從圖中不難得出,隨着特徵數增多(模型複雜度提高),EinE_{in} 不斷降低(高階多項式擬合能力強),EoutE_{out} 不斷增加。EinE_{in}EoutE_{out} 相差越來越大;而 EcvE_{cv}EoutE_{out} 的曲線非常接近。因此 EcvE_{cv}EinE_{in} 分類效果好,泛化能力強。


習題3:
在這裏插入圖片描述


15.4 V-Fold Cross Validation

上一節中介紹的留一法交叉驗證存在兩個問題:一是數據量比較大時,選擇模型的計算開銷很大,比如樣本爲1000個,則每個模型要使用999個樣本運行1000次;二是穩定性不好,因爲總是單一樣本做驗證,導致 EcvE_{cv} 的曲線波動,很不穩定。實際應用中很少使用留一法交叉驗證。

爲了解決留一法交叉驗證的兩個問題,提出了V­折交叉驗證(V-Fold Cross Validation),將樣本數據集分成大小相等的V個子集,每次隨機選擇其中V-1個子集作爲訓練集,一個子集作爲驗證集。留一法交叉驗證是V­折交叉驗證的一個極端例子。
在這裏插入圖片描述
常用V­折交叉驗證選擇最佳的模型。因爲驗證集的樣本是樣本集中的一部分,所以並不能保證交叉驗證的效果好,其模型一定好。只有樣本數據足夠豐富,交叉驗證的結果才越可信,其選擇的模型泛化能力越強。


習題4:
在這裏插入圖片描述


Summary

在這裏插入圖片描述

本節課主要介紹了機器學習訓練過程中的驗證方法。從模型選擇引入問題,經過分析可知,使用 EinE_{in} 或者 EtestE_{test} 都存在很大的問題,於是使用 EvalE_{val} 作爲評價指標。然後詳細介紹了驗證的過程。最後介紹留一法交叉驗證和 V-折交叉驗證的原理及其優缺點。實際應用時,使用V-折交叉驗證,通常取V=10。


參考
https://www.cnblogs.com/ymingjingr/p/4306666.html
https://github.com/RedstoneWill/HsuanTienLin_MachineLearning

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章