0
点赞
收藏
分享

微信扫一扫

【R语言数据科学】:交叉验证再回首

【R语言数据科学】:交叉验证再回首


请添加图片描述

文章目录

前言

1 K折交叉验证

image-20220703222428311

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pdGV1xio-1656858582711)(https://s2.loli.net/2022/07/03/PfUQqM7yVFx9sGL.png)]

在这里插入图片描述

image-20220703222512326

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AUyEOAWo-1656858582712#pic_center)(https://s2.loli.net/2022/07/03/aehYS8XZutK4W7r.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mj0Noh3S-1656858582712)(https://s2.loli.net/2022/07/03/Krce4QBj6AqxW5w.png)]

image-20220703222555025

2 K-fold交叉验证代码实现

# 7是我的幸运数字,我就这么设置了
library(ISLr2)
library(boot)
set.seed(7)
# 初始化向量来保存10折交叉验证的结果
cv_error_10 <- rep(0,10)
for (i in 1:10){
    glm.fit <- glm(mpg~poly(horsepower,i), data = Auto)
    cv_error_10[i] <- cv.glm(Auto,glm.fit,K = 10)$delta[1]
}
cv_error_10
  1. 24.1463716629577
  2. 19.3130825829741
  3. 19.434897545051
  4. 19.5493689322887
  5. 19.0736379228708
  6. 18.7058531603005
  7. 19.2522869995751
  8. 18.8552270777634
  9. 18.9304332711781
  10. 20.4425474405408
x <- seq(1,10)
library(ggplot2)
kcv <- data.frame(x,cv=cv_error_10)
ggplot(kcv, aes(x, cv)) +geom_point() + geom_line(lwd=1,col='blue')

png

3.留一法交叉验证(LOOCV)

4.留一法交叉验证代码实现

library(boot)
glm.fit <- glm(mpg~horsepower, data = Auto)
cv.err <- cv.glm(Auto,glm.fit)
cv.err$delta
  1. 24.2315135179292
  2. 24.2311440937562
cv.error <- rep(0,10)
for (i in 1:10) {
    glm.fit <- glm(mpg~poly(horsepower,i),data= Auto)
    cv.error[i] <- cv.glm(Auto, glm.fit)$delta[1]
}
cv.error
  1. 24.2315135179293
  2. 19.2482131244897
  3. 19.334984064029
  4. 19.4244303104303
  5. 19.0332138547041
  6. 18.9786436582254
  7. 18.8330450653183
  8. 18.9611507120531
  9. 19.0686299814599
  10. 19.490932299334
loocv <- data.frame(x,cv=cv.error)
library(ggplot2)
ggplot(loocv, aes(x, cv.error)) +geom_point() + geom_line(lwd=1,col='blue')

在这里插入图片描述

5.总结

举报

相关推荐

0 条评论