模型評估與選擇Model Assessment and Selection

原博客:https://daya-jin.github.io/2018/12/11/Model_Assessment_and_Selection/

模型評估與選擇

Bias

偏差爲模型對於觀測數據的擬合程度,可以理解爲射箭時的準心與靶心的偏差。

Variance

方差能表徵模型的穩定程度,可以理解多次射箭時各準心的分散程度。

Model Complexity

一般來說,越簡單的模型具有偏差高方差低的特點,而複雜模型則恰好相反。

假設有訓練集τ\tau以及模型的評估方法L(Y,f^(X))L(Y,\hat{f}(X)),那麼模型的泛化誤差(generalization error)可表示爲:

Err=E[L(Y,f^(X)τ)] Err=E[L(Y,\hat{f}(X)|\tau)]

給定訓練集下訓練得到的模型f^(X)\hat{f}(X)在整個羣體XX上的期望誤差,除此之外,在訓練集上還可以得到一個訓練誤差(training error):

Errτ=1NL(Yτ,f^(Xτ)) Err_{\tau}=\frac{1}{N}L(Y_{\tau},\hat{f}(X_{\tau}))

可惜因爲variance的存在,訓練誤差並不能很好地作爲泛化誤差的估計。雖然更復雜的模型能夠捕獲到數據中更深層次的結構(同時也需要更多的數據),但會有過擬合的風險,就像做閱讀理解的時候過度解讀了一樣。所以,對模型的有效評估很重要。

在數據充足的情況下,辦法很簡單,將已有數據進行劃分,一部分作爲訓練集(training set)用於訓練模型,另一部分用作驗證集(validation set)用於檢驗模型在未知數據上的泛化性能。不過怎麼劃分數據並沒有一個統一準則,一般來講,原有數據的信噪比越大,訓練集的比例可以降低;模型越簡單,訓練集的比例也可以降低。

偏差-方差分解

對於真實分佈Y=f(X)+ϵY=f(X)+\epsilon,其中ϵN(0,σ2)\epsilon\sim N(0,\sigma^{2}),那麼一個模型f^(x)\hat{f}(x)在某個樣本上的期望誤差爲:

Err(x0)=E[(Yf^(x0))2X=x0]=σ2+[E(f^)f]2+E[f^E(f^)]2=σ2+Bias2+Variance \begin{aligned} Err(x_{0})&=E[(Y-\hat{f}(x_{0}))^{2}|X=x_{0}] \\ &=\sigma^{2}+[E(\hat{f})-f]^{2}+E[\hat{f}-E(\hat{f})]^{2} \\ &=\sigma^{2}+Bias^{2}+Variance \\ \end{aligned}

此處有上式的推導,個人沒看懂,如果有懂的請指導一下,謝謝。

下面的圖詮釋了偏差與方差的問題:

bias variance

上圖的藍色範圍表示的是數據真實分佈;紅色範圍表示的是模型空間,紫色範圍表示受限模型空間,模型空間由模型的擬合能力決定,模型越複雜擬合空間就越大,如神經網絡理論上能擬合任意形狀的函數。在選定一個特定的模型後,該模型理論上能達到的最優解爲羣體最優解(closest fit in population),但是由於觀測樣本與整體分佈之間的不一致,,模型只能在已有的觀測數據上進行擬合,這樣的到的最優解叫做觀測最優解(closest fit in realization)。某一個模型的羣體最優解與真實數據分佈之間的誤差叫做模型偏差(model bias),這是由模型決定的,想要減小模型偏差只能換模型。另一方面,原有模型空間的複雜度與模型預測的波動性會因模型本身而改變,如圖中黃色空間所示;在之前的文章中提到,一般會使用一定的誤差增加來換取更高的穩定性,這就是圖中的紫色空間。在受限模型空間內的最優解與原有模型空間內的最優解的距離就叫做估計偏差(estimation bias),這跟之前說的正則化等同於偏差換方差是一致的。

交叉驗證

爲了實現對測試誤差的有效估計,最常用的方法就是做交叉驗證(cross validation)。交叉驗證的思想很簡單,將已有數據劃分成KK份,每次將其中的一份作爲驗證集(validation set),而用剩下的K1K-1份數據作爲訓練集訓練得到模型,這樣就可以重複訓練KK次,可以得到KK驗證誤差(validation error),將其平均作爲對測試誤差的估計。

CV

KK的取值通常爲5或10,特別的,當K=NK=N時叫做留一驗證法(leave-one-out)。值得一提的是,當KK越大,驗證誤差與測試誤差之間的偏差就越小,但是方差越大,反之亦然。

Bootstrap

Bootstrap是指有放回的抽樣,假設現在有觀測數據Z=(z1,z2,...,zN)Z=(z_{1},z_{2},...,z_{N}),進行BB輪有放回的抽樣會得到BB個有重疊的子樣本Z1,Z2,...,ZBZ_{1},Z_{2},...,Z_{B}。有了這些數據子集之後就可以根據這些子集來估計原本觀測數據的任意統計變量,如利用bootstrap來估計整體的方差:

S^(Z)=1B1i=1B(S(Zi)Sˉ)2 \hat{S}(Z)=\frac{1}{B-1}\sum\limits_{i=1}^{B}(S(Z_{i})-\bar{S})^{2}

其中Sˉ=1Bi=1BS(Zi)\bar{S}=\frac{1}{B}\sum\limits_{i=1}^{B}S(Z_{i}),爲使用子樣本對整體的均值估計。

現在每一輪bootstrap都是對已有數據做等體量的採樣,即對有NN個樣本的數據集,每一輪bootstrap採出NN個樣本作爲數據子集,那麼容易得到,每一個樣本被採到的概率爲:

P(IN)=1P(NOT IN)N=1(11N)N=11e=0.632 \begin{aligned} P(IN)&=1-P(NOT \ IN)^{N} \\ &=1-(1-\frac{1}{N})^{N} \\ &=1-\frac{1}{e} \\ &=0.632 \end{aligned}

由此可以看出,每一輪bootstrap得到的樣本子集ZiZ_{i}大概只包含了原觀測數據的63.2%,因此原數據中未被抽到的36.8%可以用作模型驗證,前面的文章也提到過,這叫包外誤差估計。但是包外誤差估計有一個問題,就是在驗證模型中只用了大約2/3的數據去訓練模型,這樣得出的誤差估計值差不多相當於使用3折交叉驗證或2折交叉驗證。如果該模型關於該數據的學習曲線在N2\frac{N}{2}2N3\frac{2N}{3}區間有很明顯的提升的話,那麼包外誤差估計得到的驗證效果只是測試誤差的一個悲觀估計(Pessimistic estimate)。

爲了提升包外估計的準確性,引入訓練誤差,並賦以權重,得到改進的**.632估計**:

Err^.632=0.368×Errtrain+0.632×Errvalidation \hat{Err}^{.632}=0.368{\times}Err_{train}+0.632{\times}Err_{validation}

.632估計在過擬合的情況下表現會很糟糕。比如現在有一個二分類問題,模型在訓練集上過擬合導致Errtrain=0Err_{train}=0,而在驗證集上表現我們取一個最低值0.50.5,那麼.632估計給出的驗證誤差爲:

Err^.632=0.368×0+0.632×0.5=0.316 \begin{aligned} \hat{Err}^{.632}&=0.368{\times}0+0.632{\times}0.5 \\ &=0.316 \end{aligned}

可以看到,.632估計在過擬合的情況下會給出一個樂觀估計。

.632+估計,待補充。

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