R语言——十折交叉验证

一、数据

从网页https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/regression/mg获取mg数据,该数据有1个因变量和6个自变量。

将数据复制进excel,选中第一列,数据->分列->分隔符号->空格,将数据进行分列。

R语言——十折交叉验证

将数据中的x:删去(可以使用替换功能)

R语言——十折交叉验证

最后在第一行加入变量名,另存为csv文件,即可以在R中正常载入。

R语言——十折交叉验证

二、思想

十折交叉验证的方法用于判断实验结果的可靠性。

其基本实现方法是:将所有数据划分为十份,依次选取一份数据作为测试集,其余九份做训练集,共建立十个模型,可分别得到10个标准化的均方误差(NMSE),求出10次平均的NMSE。

R语言——十折交叉验证

对于训练集来说,其NMSE=1-R²,对于测试机来说,NMSE与回归得到的R²没有太大关系。交叉验证主要关心的是测试集的NMSE。

三、实现

rm(list=ls())
#setwd("")  #设置路径

#随机选择Z折下标集的函数,n样本量,seed随机种子
CV=function(n,Z=10,seed=888){
  z=rep(1:Z,ceiling(n/Z))[1:n]
  set.seed(seed)
  z=sample(z,n)
  mm=list()
  #mm[[i]]为第i个下标集
  for (i in 1:Z) mm[[i]]=(1:n)[z==i];return(mm)
}

#数据导入
w=read.csv("mg.csv")
n=nrow(w);Z=10;mm=CV(n,Z);D=1

MSE=rep(0,Z) #建立一个向量储存结果
for(i in 1:Z){   #循环十次
  m=mm[[i]];
  M=mean((w[m,D]-mean(w[m,D]))^2)
  a=lm(y~.,w[-m,]) #简单线性回归,[-m]为训练集下标集合
  MSE[i]=mean((w[m,D]-predict(a,w[m,]))^2)/M  #求测试集NMSE
}
mean(MSE)

也可以对数据集进行更多的划分,改变Z值

R语言——十折交叉验证R语言——十折交叉验证 Netceor 发布了75 篇原创文章 · 获赞 7 · 访问量 1万+ 私信 关注
上一篇:Struts 和Spring的核心控制器


下一篇:【巨杉数据库SequoiaDB】巨杉Tech | 巨杉数据库的并发 malloc 实现