ISLR系列:(3)重采樣方法 Cross-Validation & Bootstrap


Resampling Methods

此博文是 An Introduction to Statistical Learning with Applications in R 的系列讀書筆記,作為本人的一份學習總結,也希望和朋友們進行交流學習。

該書是The Elements of Statistical Learning 的R語言簡明版,包含了對算法的簡明介紹以及其R實現,最讓我感興趣的是算法的R語言實現

  【轉載時請注明來源】:http://www.cnblogs.com/runner-ljt/

   Ljt   勿忘初心  無畏未來

   作為一個初學者,水平有限,歡迎交流指正。


   

       本節將介紹兩種最常用的重采樣方法:交叉驗證(cross-validation)和拔靴法(bootstrap).

       由於訓練誤差可以很容易的計算,但是測試誤差並不能被直接計算,訓練誤差一般是不能等同於測試誤差,而且訓練誤差經常低估測試誤差。

 所以,通過交叉驗證的技術,將樣本分割,一部分作為訓練樣本,一部分作為測試樣本,通過計算在測試樣本上的誤差率來估計測試誤差,常見的

 交叉驗證技術有留一交叉驗證和K折交叉驗證法;拔靴法是利用有限的樣本資料經由多次重復抽樣,重新建立起足以代表母體樣本分布之新樣本,

 其主要特點是能夠被廣泛的應用到各種統計學習方法中,特別是在對難以估計或者統計軟件不能直接給出結果的變量的估計中。

 


 Cross-Validation

  K折交叉驗證:  cv.glm(data,glmfit,K) 

   glmfit為包含廣義線性模型結果的glm類

   返回兩個值的向量,第一個是對預測量的交叉驗證的一般估計,第二個是調整后的交叉驗證估計,調整的部分主要是彌補沒有使用留一交叉驗證而帶來的偏差。

 

> 
> library(ISLR)
> library(boot)
> head(Auto)
  mpg cylinders displacement horsepower weight acceleration year origin                      name
1  18         8          307        130   3504         12.0   70      1 chevrolet chevelle malibu
2  15         8          350        165   3693         11.5   70      1         buick skylark 320
3  18         8          318        150   3436         11.0   70      1        plymouth satellite
4  16         8          304        150   3433         12.0   70      1             amc rebel sst
5  17         8          302        140   3449         10.5   70      1               ford torino
6  15         8          429        198   4341         10.0   70      1          ford galaxie 500
> glm.fit<-glm(mpg~horsepower,data=Auto)
> #留一交叉驗證LOOCV
> cv.err<-cv.glm(Auto,glm.fit)
> cv.err$delta
[1] 24.23151 24.23114
> 
> glm.fit2<-glm(mpg~horsepower+horsepower^2,data=Auto)
> #K折交叉驗證
> cv.err10<-cv.glm(Auto,glm.fit2,K=10)
> cv.err10$delta
[1] 24.07636 24.06930
> 

 


The Bootstrap

  主要步驟:

   1.建立計算待估計統計量的函數

   2.運用boot函數從樣本中有重復的取樣

      boot(data,statistic,R)

       statistic的參數必須包含計算的數據集data和測試數據的索引index , R為bootstrap的重復次數

       結果返回待統計量的估計值original和其標准差std.error

> library(boot)
>#建立待估計變量的計算函數
> alpha.fn<-function(data,index)
+ {
+     X=data$X[index]
+     Y=data$Y[index]
+     return((var(Y)-cov(X,Y))/(var(X)+var(Y)-2*cov(X,Y)))
+ }
> 
> 
> #有重復的取樣
> boot(Portfolio,alpha.fn,R=1000)

ORDINARY NONPARAMETRIC BOOTSTRAP


Call:
boot(data = Portfolio, statistic = alpha.fn, R = 1000)


Bootstrap Statistics :
     original       bias    std. error
t1* 0.5758321 6.936399e-05  0.08868935
> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM