理解什么叫交叉验证

科技   2024-10-01 15:53   广东  

 今天是生信星球陪你的第998天


   

公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课,点进去咨询微信↓

生信分析直播课程(每月初开一期,春节休一个月)

生信新手保护学习小组(每月两期)

单细胞陪伴学习小组(每月两期)

1.交叉验证的目的

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

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

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

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

2.交叉验证基础知识

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

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

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

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

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

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

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

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

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是打乱顺序,就像打扑克时洗牌是一个道理。

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.0250.975])) 
## [0.21170138 0.39830494]

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


生信星球
一个零基础学生信的平台-- 原创结构化图文/教程,精选阶段性资料,带你少走弯路早入门,收获成就感,早成生信小能手~
 最新文章