UA MATH574M 统计学习 Variable Selection:Cross Validation
UA MATH574M 統計學習 Variable Selection:Cross Validation
- LOOCV
- LOOCV score的計算
- K-fold CV
- Generalized CV
故事要從線性回歸開始講起。我們知道線性回歸有很多優點,模型簡單容易解釋性質良好,但它在復雜一點的現實問題中表現很差(因為現實數據質量差、結構復雜、維數高等原因)。線性回歸雖然能搞出無偏估計但方差很大,所以MSE也就不小了?,F代統計為了在解決現實問題上有所突破,選擇給估計量增加一些約束,放棄無偏性,試圖讓模型的MSE變小,這些約束放在損失函數中被稱為懲罰項。一個很重要的問題是應該怎么確定懲罰項的系數,或者說怎么調參。首先有幾個基本原則:1)數據是很貴的,所以調參要盡可能不浪費訓練模型的數據;2)調參方法不能太繁瑣,要在盡可能快的時間內完成調參;3)調參的過程最好可解釋、可推廣。如果數據真的很充裕,可以考慮在訓練集和測試集之外再設置一個validation set用來調參;如果模型比較特殊,比如線性回歸、時間序列模型等,可以推導一些理論的criteria來確定參數;除此之外最常用的是重抽樣法調參,而重抽樣法中最常用的是Cross-validation(CV)方法,所以這一講主要聊Cross-validation。
考慮監督學習算法Y=f(X)+?Y=f(X)+\epsilonY=f(X)+?,數據集為{(Xi,Yi)}i=1n\{(X_i,Y_i)\}_{i=1}^n{(Xi?,Yi?)}i=1n?,我們要把這個數據集分成training set和validation set,分別用來訓練模型和調參。
LOOCV
最早提出Leave-one-out(LOO)思想的是Mosteller and Tukey (1968),這個思想也在Allen (1971)中被用來計算PRESS(參考回歸那個系列的博文UA MATH571A 多元線性回歸II 變量選擇)。它的idea很簡單,就是每一次拿掉一個樣本,用剩下的樣本訓練模型,預測拿掉的這個樣本,計算validation error,最后通過最小化validation error來選擇超參。如果被拿走的是第iii個,用剩下的n?1n-1n?1個樣本訓練出來的算法是f^?i\hat{f}_{-i}f^??i?,則validation error也被稱為LOOCV score:
LOOCV=1n∑i=1nL(Yi,f^?i(Xi))LOOCV =\frac{1}{n} \sum_{i=1}^n L(Y_i,\hat{f}_{-i}(X_{i}))LOOCV=n1?i=1∑n?L(Yi?,f^??i?(Xi?))
調參的思路是找能最小化LOOCV score的參數即可。關于LOOCV我們想了解兩個問題:LOOCV score與監督學習算法的測試誤差如何互相聯系,根據LOOCV調參是否能保證算法一定具有不錯的泛化能力?按LOOCV的定義,我們需要估計nnn次模型才能計算出LOOCV score,這貌似有點麻煩,有沒有更簡單一點的不用每leave one out都要估計一下模型的計算方法?
LOOCV score的計算
先介紹一個看起來是廢話的性質:
Leave-one-out Property 如果把(Xi,f^?i(Xi))(X_i,\hat{f}_{-i}(X_i))(Xi?,f^??i?(Xi?))添加到去掉的第iii個樣本的位置,我們就又有了一個nnn個樣本的數據集,用它來訓練監督學習算法,記為f~?i\tilde{f}_{-i}f~??i?,則
f~?i(Xj)=f^?i(Xj),?j=1,?,n\tilde{f}_{-i}(X_j) = \hat{f}_{-i}(X_j),\forall j = 1,\cdots,nf~??i?(Xj?)=f^??i?(Xj?),?j=1,?,n
這其實是說,如果把監督學習算法比作是貼近樣本點的某種曲面,那么把曲面上除樣本點以外的點再添加一個在樣本里面,重新估計得到的新的曲面就是原來這個曲面。我們可以把算法輸出看成YYY的某種線性平滑:
f^(X)=SY\hat{f}(X) = SYf^?(X)=SY
其中SSS是一個n×nn\times nn×n的平滑矩陣,它與XXX的取值有關;f^(X)=[f^(X1),?,f^(Xn)]T\hat{f}(X) = [\hat{f}(X_1),\cdots,\hat{f}(X_n)]^Tf^?(X)=[f^?(X1?),?,f^?(Xn?)]T。從而
f^(Xi)?f~?i(Xi)=Sii(Yi?f^?i(Xi))\hat{f}(X_i) -\tilde{f}_{-i}(X_i) =S_{ii}(Y_i-\hat{f}_{-i}(X_i))f^?(Xi?)?f~??i?(Xi?)=Sii?(Yi??f^??i?(Xi?))
Leave-one-out Property保證了
f^(Xi)?f^?i(Xi)=Sii(Yi?f^?i(Xi))?f^?i(Xi)=f^(Xi)?Sii(Yi?f^?i(Xi))?Yi?f^?i(Xi)=Yi?f^(Xi)1?Sii\hat{f}(X_i) -\hat{f}_{-i}(X_i) =S_{ii}(Y_i-\hat{f}_{-i}(X_i)) \\ \Rightarrow \hat{f}_{-i}(X_i) = \hat{f}(X_i) - S_{ii}(Y_i-\hat{f}_{-i}(X_i))\\ \Rightarrow Y_i - \hat{f}_{-i}(X_i) = \frac{Y_i-\hat{f}(X_i)}{1-S_{ii}}f^?(Xi?)?f^??i?(Xi?)=Sii?(Yi??f^??i?(Xi?))?f^??i?(Xi?)=f^?(Xi?)?Sii?(Yi??f^??i?(Xi?))?Yi??f^??i?(Xi?)=1?Sii?Yi??f^?(Xi?)?
第二行給出了避免做n次模型估計的代換方法;如果是平方損失,則根據第三行,
LOOCV=1n∑i=1n[Yi?f^(Xi)1?Sii]2LOOCV = \frac{1}{n} \sum_{i=1}^n \left[ \frac{Y_i-\hat{f}(X_i)}{1-S_{ii}} \right]^2LOOCV=n1?i=1∑n?[1?Sii?Yi??f^?(Xi?)?]2
這種計算方法只需要額外估計擬合值與YYY的平滑矩陣SSS的對角元。Luntz and Brailovsky(1969)證明了LOOCV validation error是幾乎無偏的,它的期望等于n?1n-1n?1個樣本訓練的監督學習算法的預測誤差的期望。Devroye(1978)證明了在分類任務中,當去掉一個樣本訓練出來的算法與用完整數據訓練出來的算法非常接近時,LOOCV validation error的方差上界為1/n1/n1/n。
K-fold CV
Multifold CV的思想最早是Geisser (1975)提出來的,它的思想是每次移走ddd(d>1d>1d>1)個樣本,這樣一共就有CndC_n^dCnd?種移法,用移走ddd個剩下的樣本作為訓練集訓練模型,然后在這ddd個樣本上計算validation error,最后做這CndC_n^dCnd?個validation的簡單平均作為最后的validation error,通過最小化這個validation error來調參。Zhang (1993)證明了這種方法與信息準則的漸近等價性。
K-fold CV的思想最早出現在Breiman et al. (1984)中,這種方法按組移動樣本而不是針對單個或者多個樣本進行移動。假設nnn個樣本被分為KKK組,每一組具有數目相同的樣本數,每一次用除第kkk組外的其他數據訓練模型,然后計算模型在第kkk組上的validation error,重復KKK次,計算這些validation error的簡單平均作為最后的validation error。記κ:{1,2,?,n}→{1,2,?,K}\kappa:\{1,2,\cdots,n\}\to\{1,2,\cdots,K\}κ:{1,2,?,n}→{1,2,?,K}記錄樣本與組數的對應關系,則
CVK=1n∑i=1nL(Yi,f^?κ(i)(Xi))CV_K = \frac{1}{n}\sum_{i=1}^n L(Y_i,\hat{f}_{-\kappa(i)}(X_i))CVK?=n1?i=1∑n?L(Yi?,f^??κ(i)?(Xi?))
如果取κ(i)=i\kappa(i)=iκ(i)=i,則K-fold CV就變成LOOCV。Zhang (1993)指出用K=5,10K=5,10K=5,10的效果一般是比較好的。
Generalized CV
Generalized CV(GCV)是對LOOCV的計算的進一步修正,平方損失下計算LOOCV score需要
LOOCV=1n∑i=1n[Yi?f^(Xi)1?Sii]2LOOCV = \frac{1}{n} \sum_{i=1}^n \left[ \frac{Y_i-\hat{f}(X_i)}{1-S_{ii}} \right]^2LOOCV=n1?i=1∑n?[1?Sii?Yi??f^?(Xi?)?]2
如果SiiS_{ii}Sii?們相差不大,我們就可以用他們的均值來做個近似:
Sii≈tr(S)/nS_{ii} \approx tr(S)/nSii?≈tr(S)/n
并定義基于這種近似計算的LOOCV score為GCV score
GCV=1n∑i=1n[Yi?f^(Xi)1?tr(S)/n]2GCV = \frac{1}{n} \sum_{i=1}^n \left[ \frac{Y_i-\hat{f}(X_i)}{1-tr(S)/n} \right]^2GCV=n1?i=1∑n?[1?tr(S)/nYi??f^?(Xi?)?]2
它可以進一步減少計算量,并且這個東西有更好的統計性質。
總結
以上是生活随笔為你收集整理的UA MATH574M 统计学习 Variable Selection:Cross Validation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UA MATH571A R语言回归分析实
- 下一篇: 矩阵分析与多元统计1 线性空间与线性变换