• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

【模型比较与选择】交叉验证方法原理及R语言代码实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
交叉验证是进行模型比较的一种有效方法。

它的基本原理如下(Kohavi,1995):
(1)把原始数据集分解成 r个大小近似相等的子数据集。
(2)把第一个子数据集作为验证数据集,把其余r-1个子数据集合并后用于估计模型参数。基于该模型的参数对验证数据集的因变量进行预测,并计算预测误差的平方和。
(3)把第二个、第三个......直至第r个子数据集分别作为验证数据集,并把其余的r-1个子数据集合并后用于估计模型参数。基于验证数据集计算因变量预测误差的平方和。
(4)计算前述r个预测误差平方和的平均值,平均值最小的模型为最优模型。
注意,最优模型选定以后,模型的最终参数需要基于全体数据重新估计。
交叉验证的一个特例是将每个观察值作为一个子数据集,然后使用该观察值之外的其他所有观察值估计模型参数,并计算预测误差的平方。

表达式如下:





附带R语言实现代码以数据集state.x77为例(R语言自带,以下代码可直接运行)
#R平方的k重交叉验证
#library(bootstrap) #crossval函数实现k重交叉验证
shrinkage <- function(fit,k=10){
  require(bootstrap)
  theta.fit <- function(x,y){lsfit(x,y)}
  theta.predict <- function(fit,x){cbind(1,x)%*%fit$coef}
  x <- fit$model[,2:ncol(fit$model)]
  y <- fit$model[,1]
  results <- crossval(x,y,theta.fit,theta.predict,ngroup = k)
  r2 <- cor(y,fit$fitted.values)^2
  r2cv <- cor(y,results$cv.fit)^2
  cat("Original R-square =",r2,"\n")
  cat(k,"Fold Cross-Validated R-square =",r2cv,"\n")
  cat("Change =",r2-r2cv,"\n")
}
#对数据states所有预测变量进行回归,然后用shrinkage()函数做10重验证
states <- as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])
fit0 <- lm(Murder~Population+Illiteracy+Income+Frost,data=states)
shrinkage(fit0)

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
R语言常用函数参考发布时间:2022-07-18
下一篇:
安装R语言解释器,并在EditPlus中配置编程环境发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap