ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

交叉验证:机器学习模型评估的隐形陷阱与红酒数据集实战

交叉验证:机器学习模型评估的隐形陷阱与红酒数据集实战 Kaggle圈子里混久了会发现一个现象很多人不是不会用机器学习库而是不会判断“这个模型到底行不行”。模型一换分数忽高忽低跑出来的结果连自己都不敢信。直到我看了Abhishek Thakur那套“Approaching (Almost) Any Machine Learning Problem”的框架才明白问题出在哪儿——交叉验证没做对。这篇文章不聊虚的直接拿经典的UCI红酒数据集把Abhishek框架里交叉验证的坑一个个踩给你看再给出对应解法。如果你也处于照抄代码能跑、换数据就翻车的阶段这篇内容值得你花十分钟看完。1. Abhishek框架的核心为什么第一步就卡在交叉验证1.1 那个让我改变习惯的公开分享Abhishek Thakur是Kaggle的Grandmaster他在公开分享里反复提到一个观点任何机器学习项目交叉验证都是最重要的部分。他说过类似“没有交叉验证你就没有真正评估模型的能力”这样的话。我第一次听的时候觉得他在夸大其词毕竟当时我习惯了把数据集直接扔进train_test_split然后跑一个准确率就觉得自己完成任务了。真正让我改变的是后来参加一个小型竞赛我用同样的特征、同样的模型只是换了一个随机种子线上分数差了将近三个百分点。那一刻我才意识到不是模型不行而是我根本不知道模型在真实数据上的表现是什么。Abhishek的框架其实很简单明确问题类型、选择评估指标、设计交叉验证、做特征工程、选模型、调参、集成。每一步之间是强依赖的而交叉验证是所有环节的地基。如果评估本身是偏的你后面所有关于特征和参数的决策都会跟着偏。这就像称体重用的秤不准你每天记录体重变化没有任何意义。1.2 交叉验证在整套框架里的位置在Abhishek的框架里交叉验证服务于两件事一是模型选择二是模型评估。模型选择指的是从随机森林、XGBoost、逻辑回归这些候选者里挑出最好的模型评估则是确定这个模型在未知数据上大概能有多好。两个需求都指向同一个问题——你需要一个可信的、低方差的性能估计。很多人以为交叉验证只是esklearn里一个函数调用实则不然。选错交叉验证方法、把预处理步骤放进交叉验证之外、忽视数据本身的分布特征都会让评估结果失真。Abhishek在他的书和分享里强调的核心原则是交叉验证的划分方式必须尽可能模拟真实的线上数据分布。如果线上数据分布是稳定的那么随机K折就够了如果类别不平衡就要用分层K折如果数据有时间属性就要用时间序列切分。红酒数据集恰好属于那种“表面平衡、实际偏斜”的场景是最适合讲解交叉验证陷阱的教材。2. 红酒数据集一眼看穿它为什么不简单2.1 数据集结构与特征说明红酒数据集来自UCI Machine Learning Repository全称是Wine Quality数据集分为红葡萄酒和白葡萄酒两个版本。红葡萄酒版本有1599条样本每一条记录包含11个关于葡萄酒理化性质的输入特征目标变量是品酒师给出的质量评分范围是0到10的整数。这11个特征分别是固定酸度fixed acidity、挥发性酸度volatile acidity、柠檬酸citric acid、残糖residual sugar、氯化物chlorides、游离二氧化硫free sulfur dioxide、总二氧化硫total sulfur dioxide、密度density、pH值、硫酸盐sulphates和酒精含量alcohol。从数据处理的角度看这些特征全部是数值型没有缺失值数据质量算是相当干净的。但它有一个很容易忽略的特点目标变量是0到10的整数评分而不是连续变量。这意味着你可以把它当回归问题做预测具体分数也可以当多分类问题做预测分数属于3、4、5、6、7、8中的哪一档。这两种选择会直接影响交叉验证时是否需要用分层策略。而Abhishek的框架里第一步就是明确问题类型这一步看起来简单大部分人却没认真想过。2.2 最容易被忽略的三个隐藏特点第一个特点是类别分布极度偏斜。红葡萄酒数据里质量评分为5的样本有681条评分为6的有638条两者加起来已经超过总数的80%。但评分为3的只有10条评分为8的只有18条。如果用普通K折切5份每折里评分为3的样本平均只有2条某几折甚至可能一
返回列表