R语言交叉验证的实现代码

k-折交叉验证

k-折交叉验证(K-fold cross-validation)是交叉验证方法里一种。它是指将样本集分为k份,其中k-1份作为训练数据集,而另外的1份作为验证数据集。用验证集来验证所得分类器或者模型的错误率。一般需要循环k次,直到所有k份数据全部被选择一遍为止。

有关交叉验证的介绍可参考作者另一博文:
http://blog.csdn.net/yawei_liu1688/article/details/79138202

R语言实现

K折交叉验证,随机分组

数据打折-数据分组自编译函数:进行交叉检验首先要对数据分组,数据分组要符合随机且平均的原则

library(plyr)
CVgroup <- function(k,datasize,seed){
 cvlist <- list()
 set.seed(seed)
 n <- rep(1:k,ceiling(datasize/k))[1:datasize]  #将数据分成K份,并生成的完成数据集n
 temp <- sample(n,datasize)  #把n打乱
 x <- 1:k
 dataseq <- 1:datasize
 cvlist <- lapply(x,function(x) dataseq[temp==x]) #dataseq中随机生成k个随机有序数据列
 return(cvlist)
}
k <- 10
datasize <- nrow(iris)
cvlist <- CVgroup(k = k,datasize = datasize,seed = 1206)
cvlist

结果输出示例:

K折交叉验证
第一种方法:循环语句写验证

data <- iris
pred <- data.frame()  #存储预测结果
library(plyr)
library(randomForest)
m <- seq(60,500,by = 20) #如果数据量大尽量间隔大点,间隔过小没有实际意义
for(j in m){  #j指的是随机森林的数量
 progress.bar <- create_progress_bar("text") #plyr包中的create_progress_bar函数创建一个进度条,
 progress.bar$init(k)  #设置上面的任务数,几折就是几个任务
 for (i in 1:k){
  train <- data[-cvlist[[i]],] #刚才通过cvgroup生成的函数
  test <- data[cvlist[[i]],]
  model <-randomForest(Sepal.Length~.,data = train,ntree = j)  #建模,ntree=j 指的树数
  prediction <- predict(model,subset(test,select = -Sepal.Length))  #预测
  randomtree <- rep(j,length(prediction))  #随机森林树的数量
  kcross <- rep(i,length(prediction))  #i是第几次循环交叉,共K次
  temp <- data.frame(cbind(subset(test,select = Sepal.Length),prediction,randomtree,kcross))#真实值、预测值、随机森林树数、预测组编号捆绑在一起组成新的数据框tenp
  pred <- rbind(pred,temp)  #temp按行和pred合并
  print(paste("随机森林:",j)) #循环至树数j的随机森林模型
  progress.bar$step() #输出进度条。告知完成了这个任务的百分之几
 }
}

结果输出示例1:

结果输出示例2:指标分别为真实值、预测值、随机森林树数、预测组编号

第二种方法:apply家族lapply
当测试的循环数较多或单任务耗时较多时,apply家族优势特别明显

data <- iris
library(plyr)
library(randomForest)
k = 10
j <- seq(10,10000,by = 20)  #j树的数量
i <- 1:k  #K折
i <- rep(i,times = length(j))
j <- rep(j,each = k)  #多少折,each多少
x <- cbind(i,j)
cvtest <- function(i,j){
 train <- data[-cvlist[[i]],]
 test <- data[cvlist[[i]],]
 model <- randomForest(Sepal.Length~.,data = train,ntree = j)
 prediction <- predict(model,subset(test,select = -Sepal.Length))
 temp <- data.frame(cbind(subset(test,select = Sepal.Length),prediction))
}

结果输出示例3:指标分别为真实值、预测值、随机森林树数、预测组编号

system.time(pred <- mdply(x,cvtest))  

mdyly在plyr包中:输出三个指标:“用户”“系统”“流逝”。其中“流逝”应该是这段代码从开始到结束的真正时间。对于一般单线程的程序来说这个时间近似于用户时间和系统时间之和,可以看出共运行了1386秒。

到此这篇关于R语言交叉验证的文章就介绍到这了,更多相关R语言交叉验证的实现代码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • R语言实现操作MySQL数据库

    用R语言做数据分析时,常常需要从多种数据源取数据,其中数据库是非常常见的数据源.用R操作MySQL数据库,可以说是数据分析师必备的技能了,本文介绍RMySQL包,可以在R语言中对数据库进行增删改查的操作. 软件版本 win10 64bit r3.6.1 rstudio 1.2 RMySQL 0.10.20 安装包 install.packages('RMySQL') 创建连接 用dbConnect函数创建连接,驱动类型设置为MySQL(),用户名user.密码password.主机host.端口

  • 如何用R语言绘制散点图

    散点图是将所有的数据以点的形式展现在直角坐标系上,以显示变量之间的相互影响程度,点的位置由变量的数值决定,每个点对应一个 X 和 Y 轴点坐标. 散点图可以使用 plot() 函数来绘制,语法格式如下: plot(x, y, type="p", main, xlab, ylab, xlim, ylim, axes) x 横坐标 x 轴的数据集合 y 纵坐标 y 轴的数据集合 type:绘图的类型,p 为点.l 为直线, o 同时绘制点和线,且线穿过点. main 图表标题. xlab.

  • R语言导入导出数据的几种方法汇总

    导出: 对于某一数据集导出文件的方法 导出例子:write.csv(data_1,file = "d:/1111111111.csv") 其中data_1是你的数据集,file是你的存储路径和要存储的名字 导入: 1  使用键盘输入数据 (1) 创建一个空数据框(或矩阵),其中变量名和变量的模式需与理想中的最终数据集一致: (2)针对这个数据对象调用文本编辑器,输入你的数据,并将结果保存回此数据对象中. 在下例中,你将创建一个名为mydata的数据框,它含有三个变量:age(数值型).

  • R语言 实现输出九九乘法表

    在R语言中,使用cat()函数可以将多个变量连接起来并输出到控制台或者File文件中. 下面,以九九乘法表为例来 演示cat()函数的用法 //jiujiubiao.R ## 九九乘法表 for(i in 1:9){ for(j in 1:i){ m = j*i cat(i,'*',j,'=',m,' ') } cat('\n') } 效果如下: 图(1) 使用cat()输出九九乘法表 补充:R语言 用 sprintf 打印九九乘法表 九九乘法表 for (i in c(1:9)) { for

  • R语言的历史介绍

    R语言来自S语言,是S语言的一个变种.S语言由Rick Becker, John Chambers等人在贝尔实验室开发, 著名的C语言.Unix系统也是贝尔实验室开发的. S语言第一个版本开发于1976-1980,基于Fortran: 于1980年移植到Unix, 并对外发布源代码. 1984年出版的"棕皮书" (Becker and Chambers 1984) 总结了1984年为止的版本, 并开始发布授权的源代码. 这个版本叫做旧S.与我们现在用的S语言有较大差别. 1989–19

  • R语言3.6.3安装超详细教程附安装包

    软件下载 R语言3.6.3 软件安装包下载: 链接: https://pan.baidu.com/s/1sufVf2lmoj9GYG_j5_fJKQ 提取码: tnqg R语言R-4.0.4 安装包下载地址: 链接: https://pan.baidu.com/s/1uzH49cJ0lnob54k19WWjOQ 提取码: kusa 软件介绍 R语言是一款非常专业的统计建模软件,R语言拥有数据存储和处理系统;数组运算工具(其向量.矩阵运算方面功能尤其强大),完整连贯的统计分析工具;优秀的统计制图等

  • R语言 出现矩阵/缺失值的解决方案

    缺失值处理一般包括三步: 1. 识别缺失数据: 2. 检查导致数据缺失的原因: 3. 删除包含缺失值的实例或用合理的数值代替(插补)缺失值. 1.判断缺失值 函数is.na().is.nan()和is.infinite()可分别用来识别缺失值.不可能值和无穷值.每个返回结果都是 TRUE或FALSE na表示缺失值 nan表示NOT A NUMBER infinite表示+-Inf 一定要亲手试x = 0/0,以及x = 1/0 >x <- NA > is.na(x) [1] TRUE

  • R语言交叉验证的实现代码

    k-折交叉验证 k-折交叉验证(K-fold cross-validation)是交叉验证方法里一种.它是指将样本集分为k份,其中k-1份作为训练数据集,而另外的1份作为验证数据集.用验证集来验证所得分类器或者模型的错误率.一般需要循环k次,直到所有k份数据全部被选择一遍为止. 有关交叉验证的介绍可参考作者另一博文: http://blog.csdn.net/yawei_liu1688/article/details/79138202 R语言实现 K折交叉验证,随机分组 数据打折-数据分组自编译

  • R语言绘制饼状图代码实例

    R编程语言有许多库来创建图表和图表. 饼图是将值表示为具有不同颜色的圆的切片. 切片被标记,并且对应于每个片的数字也在图表中表示. 在R语言中,饼图是使用pie()函数创建的,它使用正数作为向量输入. 附加参数用于控制标签,颜色,标题等. 语法 使用R语言创建饼图的基本语法是 pie(x, labels, radius, main, col, clockwise) 以下是所使用的参数的描述 x是包含饼图中使用的数值的向量. labels用于给出切片的描述. radius表示饼图圆的半径(值-1和

  • R语言验证及协方差的计算公式

    协方差的计算公式及R语言进行验证 首先附上协方差公式: 来设5个样本点:(3,9),(2,7),(4,12),(5,15),(6,17) 用R绘制出散点图,大概是这样: 要求这5个点的协方差,首先样本点为5个,n=5,X依次取3,2,4,5,6,Y依次取9,7,12,15,17.X的均值为4,带入公式可得: 不难计算出结果为6.5 现在用R语言进行验证: 已知R语言里边协方差函数为cov(x,y) 我们分别用cov()函数和上述公式来进行仿真结果,代码如下: a <- c(3,2,4,5,6)

  • R语言绘制条形图及分布密度图代码总结

    目录 条形图 普通条形图 分组簇状条形图 分布密度图 条形图 普通条形图 ggplot(df,],aes(x=group,y=value)) +geom_bar(stat = "identity",width = 0.57) #width是条形宽度 +theme_bw() #去掉灰色的背景 +scale_x_discrete(labels=c("AUC-B","AUC-P")) #x轴分组的标签 +labs(x="time",

  • python实现K折交叉验证

    本文实例为大家分享了python实现K折交叉验证的具体代码,供大家参考,具体内容如下 用KNN算法训练iris数据,并使用K折交叉验证方法找出最优的K值 import numpy as np from sklearn import datasets from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import KFold # 主要用于K折交叉验证 # 导入iris数据集 iris =

  •  分享Python 中的 7 种交叉验证方法

    目录 一.什么是交叉验证? 二.它是如何解决过拟合问题的? 1.HoldOut交叉验证 2.K折交叉验证 3.分层K折交叉验证 4.LeavePOut交叉验证 5.留一交叉验证 6.蒙特卡罗交叉验证(ShuffleSplit) 7.时间序列交叉验证 在任何有监督机器学习项目的模型构建阶段,我们训练模型的目的是从标记的示例中学习所有权重和偏差的最佳值. 如果我们使用相同的标记示例来测试我们的模型,那么这将是一个方法论错误,因为一个只会重复刚刚看到的样本标签的模型将获得完美的分数,但无法预测任何有用

  • R语言逻辑回归、ROC曲线与十折交叉验证详解

    自己整理编写的逻辑回归模板,作为学习笔记记录分享.数据集用的是14个自变量Xi,一个因变量Y的australian数据集. 1. 测试集和训练集3.7分组 australian <- read.csv("australian.csv",as.is = T,sep=",",header=TRUE) #读取行数 N = length(australian$Y) #ind=1的是0.7概率出现的行,ind=2是0.3概率出现的行 ind=sample(2,N,rep

  • R语言基本运算的示例代码

    1.基本运算 1.1 加.减.乘.除 + - * / 在赋值中可以使用=,也可以使用<-. 1.2余数.整除 %% %/% 1.3 取绝对值 abs() 判断正负号sign() 1.4幂指数 ^ 平方根sqart () 1.5 以二为底的对数:log2() 以十为底的对数:log10() 自定义底的对数:log(c,base=) 自然常数e的对数:log(a,base=exp(1)) 2.向量运算 向量是有相同基本类型的元素序列,一维数组,定义向量的最常用办法是使用函数c(),它把若干个数值或字

  • 详解R语言数据合并一行代码搞定

    数据的合并 需要的函数 cbind(),rbind(),bind_rows(),merge() 准备数据 我们先构造一组数据,以便下面的演示 > data1<-data.frame( + namea=c("海波","立波","秀波"), + value=c("一波","接","一波") + ) > data1 namea value 1 海波 一波 2 立波 接 3 秀

  • 用R语言实现霍夫曼编码的示例代码

    可读性极低,而且其实也没必要用R语言写,图个乐罢了 p=c(0.4,0.2,0.2,0.1,0.1)###输入形如c(0.4,0.2,0.2,0.1,0.1)的概率向量,即每个待编码消息的发生概率 p1=p###将概率向量另存,最后计算编码效率要用 mazijuzhen=matrix(,nrow=length(p),ncol=length(p)-1)###码字矩阵:第i行对应向量p的第i个分量所对应的那个待编码消息的编码后的码字 group=matrix(c(1:length(p),rep(NA

随机推荐