前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >理解什么叫交叉验证

理解什么叫交叉验证

作者头像
用户11414625
发布2024-12-20 16:07:01
发布2024-12-20 16:07:01
9000
代码可运行
举报
文章被收录于专栏:生信星球520生信星球520
运行总次数:0
代码可运行

1.交叉验证的目的

今天国庆节,先祝大家节日快乐咯。

在前面的学习中,已经熟悉了训练集和测试集的拆分,在测试集上计算模型性能指标,但这个过程有一个潜在的陷阱。

如果在测试集上计算R方,则返回的值依赖于我们拆分数据的方式,测试集中的数据点可能有一些特殊性,这意味着计算的R方并不代表模型泛化到所有的未遇到过的新数据的能力。

交叉验证可以消除这种对随机拆分的依赖。

2.交叉验证基础知识

首先将数据集分成五个组或者五个fold。

用第一个fold作为测试集,剩下的作为训练集,计算感兴趣的模型指标,例如R方。

然后用第二个fold作为测试集,剩下的作为训练集,计算感兴趣的指标

以此类推,可以计算5个R方,也可以进一步计算这些R方的平均值,中位数和95%置信区间。

将数据集分成5折,就是5折交叉验证,

将数据集分成10折,就是10折交叉验证。

将数据集分成k折,就是k折交叉验证。

folds数越大,计算成本越高。(代码接上一篇继续)

代码语言:javascript
代码运行次数:0
复制
from sklearn.model_selection import cross_val_score, KFold 
kf = KFold(n_splits=6, shuffle=True, random_state=42) 
reg = LinearRegression() 
cv_results = cross_val_score(reg, X, y, cv=kf) 

shuffle是打乱顺序,就像打扑克时洗牌是一个道理。

代码语言:javascript
代码运行次数:0
复制
print(cv_results) 
## [0.31239631 0.39992274 0.38698031 0.19731639 0.32317527 0.3320924 ]
import numpy as np
print(np.mean(cv_results), np.std(cv_results)) 
## 0.32531390402925003 0.06579003824551578
print(np.quantile(cv_results, [0.025, 0.975])) 
## [0.21170138 0.39830494]

注:cv_results里的数值是R方,因为这是线性回归的默认评分。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信星球 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.交叉验证的目的
  • 2.交叉验证基础知识
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档