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 >