Resampling Methods
此博文是 An Introduction to Statistical Learning with Applications in R 的系列读书笔记,作为本人的一份学习总结,也希望和朋友们进行交流学习。
该书是The Elements of Statistical Learning 的R语言简明版,包含了对算法的简明介绍以及其R实现,最让我感兴趣的是算法的R语言实现。
本节将介绍两种最常用的重采样方法:交叉验证(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
>