【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折交叉验证。也可以尝试让每个折表示回归目标的不同取值,但这并不是一种常用的策略。

相关推荐
吃好睡好便好14 分钟前
提取矩阵某一行或某一列元素
开发语言·人工智能·线性代数·算法·matlab·矩阵
AI数字化笔记2 小时前
【无标题】
人工智能
悦数图数据库2 小时前
图数据库选型指南 2026:从架构、性能、AI 适配三个维度看 悦数科技
数据库·人工智能·架构
小江的记录本3 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
北京耐用通信3 小时前
自动化工程师必修课:耐达讯自动化Modbus TCP转PROFIBUS协议转换的核心逻辑与应用
人工智能·物联网·网络协议·自动化·信息与通信
无忧智库3 小时前
某AI漫剧超级工厂AI绘画与分镜自动化生成流水线详细设计方案(WORD)
人工智能·ai作画·自动化
火山引擎开发者社区3 小时前
ArkClaw 全新升级,从 UI 到 Agent 协作全面进化
人工智能
Mininglamp_27183 小时前
会中 AI Skill 架构设计解析:3 种人设 × 7 种能力的技术实现
人工智能·语音识别·硬件·ai agent·skill
墨神谕3 小时前
人工智能(三)— 神经网络的训练
人工智能·神经网络·机器学习
APIshop3 小时前
Python 获取 1688 商品采集 API 接口 | 工厂货源自动化对接商品信息 | 无需选品
运维·python·自动化