KVAXIR本地建模工作室 0.3.11 · 公测版
首页 / 指南 / 93% 的准确率说明不了什么

93% 的准确率说明不了什么

一个高准确率,先要问它是在什么条件下测出来的。

01— 一个真实课堂场景

用一份公开的动作识别数据集(UCI HAR)教学子集训练,第一次就能拿到 约 93% 的验证得分,第二次换更重的档位能到 约 95.4%。 学生通常的反应是「那挺准的,能用了吧」。

但这份数据有一个关键事实:这 720 条样本来自 30 个不同的人, 而刚才是随机切成训练集和测试集的。

也就是说,同一个人可能既有数据在训练集里,也有数据在测试集里。 那模型学到的,到底是「走路这件事」,还是「这 30 个人各自走路的样子」?

02— 这叫主体泄漏

这个现象叫 主体泄漏(subject leakage)。 后果是准确率虚高:模型在测试集上表现好,是因为它在训练时见过这个人, 而不是因为它学会了「走路」。

换一个从没见过的人来测,准确率就会掉下来。这正是 「实验室里 99%,上线后一塌糊涂」最常见的原因之一。

这份数据在学术界的标准做法是按人划分(21 人训练 / 9 人测试), 而不是随机划分。上面那个教学子集没有保留受试者编号, 所以课堂上的 93% 是偏高的——这一点必须讲清楚,否则就是在教错的直觉。

03— 另外两种常见的泄漏
同源泄漏
同一台设备、同一批次、同一次实验的数据被分到了训练和测试两边。模型学到的是这批数据的特性,不是规律。
时间泄漏
用未来的数据预测过去。比如做销量预测时,把"当月促销标记"当成输入特征——上线时这个特征根本拿不到。
重复样本
表格里有重复行,一条进了训练、一条进了测试。看起来是两个样本,其实是一个。
04— 拿到任何分数前,先问三个问题

还可以顺手做一个更硬的检查:把模型拿给一个没参与建模的同事, 用他自己的数据试一遍。掉多少,就是你的真实水平。

05— 那 95.4% 是不是更好?

不是。同一份数据上,更重的档位把分数从 93.1% 抬到 95.4%, 代价是训练时间翻近一倍、模型体积从约 3.4 MB 涨到约 75 MB。

而如果这 93.1% 本身来自有泄漏的划分, 那 2.3 个百分点的提升,很可能只是在更用力地记住同一批人。 先修划分方式,再谈调档位——顺序反了,花的时间都是白花。

一句可以带走的话:一个高准确率,先要问它是在什么条件下测出来的。 数据怎么划分,决定了这个数字意味着什么。

06— 相关

流程本身见 《串口采的传感器数据,怎么不写代码训出一个模型?》; 训完之后拿到的东西到底是什么,见 《模型导出之后,到底怎么用?》。

来源— 本文事实出处