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
>
ISLR系列:(3)重采样方法 Cross-Validation & Bootstrap的更多相关文章
- 交叉验证(Cross Validation)方法思想简介
以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train ...
- MVC学习系列4--@helper辅助方法和用户自定义HTML方法
在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...
- 交叉验证(Cross Validation)原理小结
交叉验证是在机器学习建立模型和验证模型参数时常用的办法.交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏. ...
- 交叉验证 Cross validation
来源:CSDN: boat_lee 简单交叉验证 hold-out cross validation 从全部训练数据S中随机选择s个样例作为训练集training set,剩余的作为测试集testin ...
- Cross Validation done wrong
Cross Validation done wrong Cross validation is an essential tool in statistical learning 1 to estim ...
- 交叉验证(cross validation)
转自:http://www.vanjor.org/blog/2010/10/cross-validation/ 交叉验证(Cross-Validation): 有时亦称循环估计, 是一种统计学上将数据 ...
- 10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)、分层采样(Stratification)
10折交叉验证 我们构建一个分类器,输入为运动员的身高.体重,输出为其从事的体育项目-体操.田径或篮球. 一旦构建了分类器,我们就可能有兴趣回答类似下述的问题: . 该分类器的精确率怎么样? . 该分 ...
- Cross Validation(交叉验证)
交叉验证(Cross Validation)方法思想 Cross Validation一下简称CV.CV是用来验证分类器性能的一种统计方法. 思想:将原始数据(dataset)进行分组,一部分作为训练 ...
- S折交叉验证(S-fold cross validation)
S折交叉验证(S-fold cross validation) 觉得有用的话,欢迎一起讨论相互学习~Follow Me 仅为个人观点,欢迎讨论 参考文献 https://blog.csdn.net/a ...
随机推荐
- Eleven
A. Eleven time limit per test : 1 second memory limit per test: 256 megabytes input: standard inpu ...
- Vasya the Hipster
One day Vasya the Hipster decided to count how many socks he had. It turned out that he had a red so ...
- ACM Primes
Write a program to read in a list of integers and determine whether or not each number is prime. A n ...
- render函数data参数中的model选项
官方文档没有说, 但是编译v-model时, 是有model这个选项的, 例如: _c('el-input', { attrs: { "placeholder": "手机 ...
- OpenCV+VS2013 属性表配置
简介 计算机视觉任务越来越多的依赖著名的开源计算机视觉库OpenCV.OpenCV 2.0 包含了一系列精心设计数据结构和经过优化的视觉算法,大家可以短时间内开发一个不错的视觉应用.OpenCV支持多 ...
- malloc_stats---检查内存泄露的神器
在之前的博客中提到过,valgrind可以用来检测内存泄露,但在使用中,往往会遇到一些问题,给调试工作带来很多不必要的麻烦,我自己遇到的有以下两种: (1)内存泄露误检(系统初始化时,可能有一些需要长 ...
- Objective-C方法与函数的区别
Objective-C方法与函数的区别 方法是唯对象所有 函数是不依赖于对象存在的 方法 函数 - (void)test; void test(); 方法是以减号 - 开头 - 类型要用()括起来 - ...
- C++ 中const作用
一.对const与#define的特点及区别的理解 #define只是用来做文本替换的,#define常量的生命周期止于编译期,它存在于程序的代码段,在实际程序中它只是一个常数,一个命令中的参数,并没 ...
- springMVC源码分析--动态样式ThemeResolver(二)
在上一篇博客springMVC源码分析--动态样式ThemeResolver(一)中我们介绍了多样式ThemeResolver的使用方法,接下来我们对源码进行简单的分析一下. ThemeResolve ...
- iOS开发出错whose view is not in the window hierarchy!的解决
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 一个简单的单窗口App在运行时出现错误: 2016-04-07 ...