【Python机器学习】模型评估与改进——分层k折交叉验证

在k折分层验证中,将数据集划分为k折时,从数据的前k分之一开始划分,这可能并不总是一个好主意,例如iris数据集中:

python 复制代码
from sklearn.datasets import load_iris

iris=load_iris()
print('Iris labels:\n:{}'.format(iris.target))

可以看到,数据的前1/3是类别0,中间1/3是类别1,后1/3是类别2。如果在这个数据集上进行3折交叉验证,第一折将只包含类别0,所以在数据的第一次划分中,测试集将只包含类别0,而训练集只包含类别1和2。由于在3次划分中训练集和测试集中的类别都不一样,所以这个数据集上的3折交叉验证精度为0,这没什么用,因为我们在iris上可以得到比0%好得多的精度。

因为简单的k折策略在这里失效了,所以scikit-learn在分类问题中不适用这种策略,而是使用分层k折交叉验证。

在分层交叉验证中,我们划分数据,使每个折中类别之间的比例与整个数据集中的比例相同,比如:

python 复制代码
mglearn.plots.plot_stratified_cross_validation()
plt.show()

举个例子,如果按照90%的样本属于类别A而10%的样本属于类别B,那么分层交叉验证可以确保,在每个折中90%的样本属于类别A而10%的样本属于类别B。

使用分层k折交叉验证而不是k折交叉验证来评估一个分类器,这通常是一个好主意,因为它可以对泛化性能做出更可靠的评估。在只有10%的样本属于类别B的情况下,如果使用标准k折交叉验证,很可能某个折中只包含类别A的样本。利用这个折作为测试集的话,无法给出分类器整体性能的信息。

对于回归问题,scikit-learn默认使用标准k折交叉验证。也可以尝试让每个折表示回归目标的不同取值,但这并不是一种常用的策略。

相关推荐
翱翔的苍鹰1 分钟前
完整的“RNN + jieba 中文情感分析”项目的Gradio Web 演示的简单项目
前端·人工智能·rnn
java1234_小锋2 分钟前
【AI大模型面试题】假设你需要为一个资源有限的场景(如单张消费级GPU)部署一个百亿参数的大模型,你会考虑哪些技术来使其可行且高效?
人工智能
呱呱巨基4 分钟前
Linux Ext系列文件系统
linux·c++·笔记·学习
云深麋鹿5 分钟前
三.栈和队列
开发语言·数据结构·c++·算法
墨抒颖 msy.plus5 分钟前
如何构建现代Agent以OpenManus为例
python·ai编程
yun68539927 分钟前
ai相关技术了解之n8n简单练习及理解
人工智能·n8n
爆打维c10 分钟前
01BFS算法(例题:网格传送门旅游)
c语言·c++·python·算法·leetcode·广度优先
喵手12 分钟前
Python爬虫零基础入门【第六章:增量、去重、断点续爬·第3节】幂等去重:同一条数据反复跑也不会重复入库!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·增量、去重、断点续爬·幂等去重
Python毕设指南13 分钟前
基于深度学习的旅游推荐系统
python·深度学习·数据分析·django·毕业设计·课程设计
像素猎人17 分钟前
力扣:面试题16.01.交换数字
c++·算法·leetcode·面试