第 2 周 · 第 3 课 · 45-60 分钟
修复数据集
当一回数据侦探:揪出重复项、错误标签和不均衡的类别,把它们一一修好,让模型能学到公平又准确的规律。
- 材料
- 在网页浏览器中打开的这节课 · 纸和笔,或者一个记事应用 · 本课中内置的那个杂乱数据集
- 本课
- 进行中
会自动保存在这台设备上
你将能够做到
- 发现常见的数据问题:重复项、错误标签和不均衡的类别。
- 说明每个问题会怎样损害模型的准确率或公平性。
- 修复一个小数据集,让它的样例都正确、类别也均衡。
想一想
一个学生正在教模型分辨苹果和香蕉。他的表里有 18 个苹果,却只有 2 根香蕉,其中一根香蕉被复制了三次,还有一个苹果被误标成了「香蕉」。当模型从这些数据中学习时,可能出什么问题?
上完这节课,你就能说出并修好这三个问题。
做个预测
预测一下:如果一个数据集里有 18 个苹果、只有 2 根香蕉,你觉得模型会把哪个类别学得更好?为什么?
- 均衡的数据
- 每个类别的样例数量都公平、大致相等的数据集,这样模型才能把每个类别都学好。
- 重复项
- 在数据集中出现不止一次的样例,它可能让模型过度关注那个被重复的个例。
- 错误标签
- 被标上了错误答案的样例,比如一根香蕉被标成「苹果」,这会教给模型一条假的规律。
- 准确率
- 模型标注正确的样例所占的比例;糟糕的数据通常会把它拉低。
- 泛化
- 模型在新样例上表现得有多好;干净、均衡的数据有助于模型泛化。
重复项:同一个样例被算了两次
重复项是指出现不止一次的样例。它看起来人畜无害,但一行重复的数据会让模型把这个单一个例当成许多个,从而给了它过大的分量。
如果同一根香蕉出现了三次,模型可能会过度关注那根特定的香蕉,而不是学会香蕉总体上是什么样。去掉重复项,能让每个真实样例只算一次。
- 表格里那一行完全相同的香蕉被复制了三次
- 同一张照片被粘贴进数据集两次
错误标签:错的答案会教出错的规律
错误标签是指被标上了错误类别的样例,比如一个苹果不小心被标成了「香蕉」。因为模型把标签当作事实来信任,一个错误的标签就会教给它一条假的规律。
哪怕只有少数几个错误标签,也可能拉低准确率,因为模型在努力迎合那些本来就不对的答案。修正一个标签,就是把它改成正确的类别(如果你实在判断不出来,就把这个样例删掉)。
- 一个又圆又红的水果被标成了「香蕉」
- 动物数据集里,一张猫的照片被标成了「狗」
均衡的数据:给每个类别公平的份额
数据均衡的意思是,每个类别都有公平、大致相等的样例数量。如果一个数据集有 18 个苹果、却只有 2 根香蕉,模型看到的苹果就多得多,可能几乎学不会香蕉长什么样,于是它会过于频繁地猜「苹果」。
让类别变均衡,无论是收集更多香蕉样例,还是把苹果削减一些,都能帮助模型学好每一个类别、并公平地泛化。干净、正确、均衡的数据,是一个准确模型的根基。
- 10 个苹果配 10 根香蕉,比 18 个苹果配 2 根香蕉均衡得多
- 主要用某一个类别训练出来的模型,往往会过多地预测那个类别
例题讲解
一步步修复一张杂乱的水果表
- 先看这张杂乱的表:18 个苹果、2 根香蕉,其中一行香蕉被复制了三次,还有一个苹果被标成了「香蕉」。
- 找出重复项:那根一模一样的香蕉出现了三次,删掉两份,保留一份。
- 修正错误标签:那个被标成「香蕉」的又圆又红的水果其实是苹果,把它的标签改成「苹果」。
- 检查均衡:现在两个类别悬殊得厉害,于是补充更多真实的香蕉样例,直到苹果和香蕉大致相当。
- 结果:一个干净、标注正确、类别均衡的数据集,模型可以从中学到公平的规律。
要点:在模型学习之前,通过删除重复项、修正错误标签和让类别均衡来修复数据集。
数值以个样例为单位。
一张条形图,按样例个数显示每个类别有多少样例。修复前:苹果 18,香蕉 2,非常不均衡。修复后:苹果 10,香蕉 10,已经均衡。让类别均衡,能给模型一个公平的机会去学会两种水果,而不是过多地预测苹果。
| 问题 | 如何修复 | 为什么重要 |
|---|---|---|
| 重复项 | 删掉多余的副本 | 单个个例分量过大 |
| 错误标签 | 把它改成正确的类别 | 错误的答案会教出假的规律 |
| 类别不均衡 | 给少的类别补样例,或削减多的那个 | 模型把稀少的类别学得不够 |
一张表,把每个数据问题与它的修复办法和重要性对应起来。重复项:某个样例被重复;修复办法是删掉多余的副本;之所以重要,是因为它让单个个例分量过大。错误标签:某个样例的答案是错的;修复办法是把标签改正;之所以重要,是因为它教出一条假的规律。类别不均衡:某个类别的样例远多于另一个;修复办法是给较少的类别补充样例,或削减较多的那个;之所以重要,是因为模型会把稀少的那个类别学得不够。
活动
修复有缺陷的数据集
修好一个杂乱的太空水果数据集,删除重复项、改正错误标签、改善均衡程度,然后重新运行模型,对比修复前后的结果。
- 检查这份有问题的数据集。删掉重复的行,改掉看起来不对的标签。
- 多加一些数量偏少那一类的样本,把比例调平衡。
- 测试用的水果始终隐藏且不变。检查并重新运行模型,比较修复前后的差别。
数据集大小
18
可以吃 / 不能吃 的数量
14 / 4
重复的行
4
错误的标签
?
重复的行会自动检测出来(特征完全相同)。错误的标签在你点击检查之前一直隐藏:先自己调查。那 8 颗测试水果是留出来的,在这里永远不会被改动。
| 水果名称 | 颜色 | 形状 | 质地 | 生长在 | 种子数 | 甜度 | 发光等级 | 大小 | 标签 / 删除 |
|---|---|---|---|---|---|---|---|---|---|
| 晨曦莓与 晨曦莓(副本) 重复 | 深红 | 圆形 | 光滑 | 林冠 | 6 | 8 | 0 | 10 厘米 | |
| 沙李 | 琥珀 | 椭圆形 | 凹凸 | 沙丘 | 4 | 7 | 1 | 8 厘米 | |
| 潮汐果 | 青绿 | 圆形 | 毛茸茸 | 礁石 | 8 | 9 | 0 | 12 厘米 | |
| 余烬梨 | 深红 | 椭圆形 | 光滑 | 林冠 | 5 | 6 | 2 | 9 厘米 | |
| 沙丘滴 | 琥珀 | 圆形 | 凹凸 | 沙丘 | 3 | 7 | 1 | 7 厘米 | |
| 林冠无花果 | 青绿 | 椭圆形 | 毛茸茸 | 林冠 | 7 | 8 | 0 | 11 厘米 | |
| 红葫芦 | 深红 | 圆形 | 光滑 | 沙丘 | 6 | 5 | 2 | 10 厘米 | |
| 礁李 | 琥珀 | 椭圆形 | 毛茸茸 | 礁石 | 4 | 9 | 1 | 8 厘米 | |
| 绿荚 | 青绿 | 圆形 | 凹凸 | 林冠 | 9 | 6 | 0 | 13 厘米 | |
| 琥珀芽 | 琥珀 | 圆形 | 毛茸茸 | 林冠 | 2 | 7 | 2 | 6 厘米 | |
| 星焰与 星焰(副本) 重复 | 紫罗兰 | 星形 | 带刺 | 陨石坑 | 2 | 3 | 4 | 5 厘米 | |
| 光螺 | 天蓝 | 螺旋形 | 凹凸 | 洞窟 | 1 | 2 | 5 | 4 厘米 | |
| 晨曦莓(副本)与 晨曦莓 重复 | 深红 | 圆形 | 光滑 | 林冠 | 6 | 8 | 0 | 10 厘米 | |
| 星焰(副本)与 星焰 重复 | 紫罗兰 | 星形 | 带刺 | 陨石坑 | 2 | 3 | 4 | 5 厘米 | |
| 虚空星 | 紫罗兰 | 螺旋形 | 光滑 | 陨石坑 | 0 | 3 | 5 | 5 厘米 | |
| 荆星 | 天蓝 | 星形 | 带刺 | 洞窟 | 3 | 2 | 2 | 5 厘米 | |
| 洞窟辉 | 天蓝 | 星形 | 凹凸 | 洞窟 | 2 | 1 | 4 | 7 厘米 | |
| 甜礁 | 青绿 | 椭圆形 | 光滑 | 礁石 | 6 | 9 | 0 | 10 厘米 |
晨曦莓
与 晨曦莓(副本) 重复- 颜色
- 深红
- 形状
- 圆形
- 质地
- 光滑
- 生长在
- 林冠
- 种子数
- 6
- 甜度
- 8
- 发光等级
- 0
- 大小
- 10 厘米
沙李
- 颜色
- 琥珀
- 形状
- 椭圆形
- 质地
- 凹凸
- 生长在
- 沙丘
- 种子数
- 4
- 甜度
- 7
- 发光等级
- 1
- 大小
- 8 厘米
潮汐果
- 颜色
- 青绿
- 形状
- 圆形
- 质地
- 毛茸茸
- 生长在
- 礁石
- 种子数
- 8
- 甜度
- 9
- 发光等级
- 0
- 大小
- 12 厘米
余烬梨
- 颜色
- 深红
- 形状
- 椭圆形
- 质地
- 光滑
- 生长在
- 林冠
- 种子数
- 5
- 甜度
- 6
- 发光等级
- 2
- 大小
- 9 厘米
沙丘滴
- 颜色
- 琥珀
- 形状
- 圆形
- 质地
- 凹凸
- 生长在
- 沙丘
- 种子数
- 3
- 甜度
- 7
- 发光等级
- 1
- 大小
- 7 厘米
林冠无花果
- 颜色
- 青绿
- 形状
- 椭圆形
- 质地
- 毛茸茸
- 生长在
- 林冠
- 种子数
- 7
- 甜度
- 8
- 发光等级
- 0
- 大小
- 11 厘米
红葫芦
- 颜色
- 深红
- 形状
- 圆形
- 质地
- 光滑
- 生长在
- 沙丘
- 种子数
- 6
- 甜度
- 5
- 发光等级
- 2
- 大小
- 10 厘米
礁李
- 颜色
- 琥珀
- 形状
- 椭圆形
- 质地
- 毛茸茸
- 生长在
- 礁石
- 种子数
- 4
- 甜度
- 9
- 发光等级
- 1
- 大小
- 8 厘米
绿荚
- 颜色
- 青绿
- 形状
- 圆形
- 质地
- 凹凸
- 生长在
- 林冠
- 种子数
- 9
- 甜度
- 6
- 发光等级
- 0
- 大小
- 13 厘米
琥珀芽
- 颜色
- 琥珀
- 形状
- 圆形
- 质地
- 毛茸茸
- 生长在
- 林冠
- 种子数
- 2
- 甜度
- 7
- 发光等级
- 2
- 大小
- 6 厘米
星焰
与 星焰(副本) 重复- 颜色
- 紫罗兰
- 形状
- 星形
- 质地
- 带刺
- 生长在
- 陨石坑
- 种子数
- 2
- 甜度
- 3
- 发光等级
- 4
- 大小
- 5 厘米
光螺
- 颜色
- 天蓝
- 形状
- 螺旋形
- 质地
- 凹凸
- 生长在
- 洞窟
- 种子数
- 1
- 甜度
- 2
- 发光等级
- 5
- 大小
- 4 厘米
晨曦莓(副本)
与 晨曦莓 重复- 颜色
- 深红
- 形状
- 圆形
- 质地
- 光滑
- 生长在
- 林冠
- 种子数
- 6
- 甜度
- 8
- 发光等级
- 0
- 大小
- 10 厘米
星焰(副本)
与 星焰 重复- 颜色
- 紫罗兰
- 形状
- 星形
- 质地
- 带刺
- 生长在
- 陨石坑
- 种子数
- 2
- 甜度
- 3
- 发光等级
- 4
- 大小
- 5 厘米
虚空星
- 颜色
- 紫罗兰
- 形状
- 螺旋形
- 质地
- 光滑
- 生长在
- 陨石坑
- 种子数
- 0
- 甜度
- 3
- 发光等级
- 5
- 大小
- 5 厘米
荆星
- 颜色
- 天蓝
- 形状
- 星形
- 质地
- 带刺
- 生长在
- 洞窟
- 种子数
- 3
- 甜度
- 2
- 发光等级
- 2
- 大小
- 5 厘米
洞窟辉
- 颜色
- 天蓝
- 形状
- 星形
- 质地
- 凹凸
- 生长在
- 洞窟
- 种子数
- 2
- 甜度
- 1
- 发光等级
- 4
- 大小
- 7 厘米
甜礁
- 颜色
- 青绿
- 形状
- 椭圆形
- 质地
- 光滑
- 生长在
- 礁石
- 种子数
- 6
- 甜度
- 9
- 发光等级
- 0
- 大小
- 10 厘米
添加样本来改善平衡
这些额外的、标签正确的水果可以加进来。多加一些稀少那一类,能帮模型学会它。
- 火花星 — 不能吃。 一颗 6 厘米的紫罗兰星形水果,表皮光滑,有 1 颗种子,甜度 4/10,发光等级 3/5,生长在陨石坑。
- 螺刺 — 不能吃。 一颗 4 厘米的天蓝螺旋形水果,表皮带刺,有 2 颗种子,甜度 2/10,发光等级 1/5,生长在洞窟。
- 亮螺 — 不能吃。 一颗 5 厘米的天蓝螺旋形水果,表皮凹凸,有 1 颗种子,甜度 1/10,发光等级 4/5,生长在洞窟。
- 荆焰 — 不能吃。 一颗 6 厘米的紫罗兰星形水果,表皮带刺,有 3 颗种子,甜度 3/10,发光等级 2/5,生长在陨石坑。
- 暮星 — 不能吃。 一颗 5 厘米的紫罗兰星形水果,表皮毛茸茸,有 0 颗种子,甜度 4/10,发光等级 3/5,生长在陨石坑。
- 夜螺 — 不能吃。 一颗 4 厘米的天蓝螺旋形水果,表皮带刺,有 2 颗种子,甜度 2/10,发光等级 2/5,生长在洞窟。
- 草原无花果 — 可以吃。 一颗 11 厘米的青绿椭圆形水果,表皮毛茸茸,有 7 颗种子,甜度 8/10,发光等级 1/5,生长在林冠。
- 阳李 — 可以吃。 一颗 9 厘米的琥珀椭圆形水果,表皮光滑,有 4 颗种子,甜度 8/10,发光等级 2/5,生长在沙丘。
这条虚构的课堂规则:如果一颗太空水果发光很强(发光等级 3 或以上),或者带刺,那它就不能吃。否则就可以吃。「标签错误」指的是标签和这条规则不符,不是真实世界的事实。
检查你的理解
回答这些题,检验你能否发现并修复数据问题。
Question 1. 在训练模型之前,下面哪些是你应该修好的问题?选出所有符合的。
把符合的都选上。
Question 2. 判断这句话是对还是错。
一个有 18 个苹果、只有 2 根香蕉的数据集是很均衡的。
Question 3. 把修复数据集的各个步骤排成合理的顺序。
- 1.查看数据集,找出其中的问题
- 2.删除重复的行,并改正错误的标签
- 3.让各个类别变得均衡
- 4.重新训练模型,并检查它的准确率
已回答 0 / 3
自己动手试试
先弄坏,再修好
拿一个干净的小数据集,故意把这三个问题一一加进去,然后再把它们修好,并描述效果。
- 从一个干净、均衡、只有两个类别的小数据集开始。
- 加一行重复数据,把一个标签改成错的,再删掉一些样例,让其中一个类别变得大得多。
- 现在把这三个问题都修好,并针对每一个说明这次修复应当如何改善模型的准确率或公平性。
做到这样就算成功
- 三个问题都被故意加入并清楚地标了出来。
- 三个问题都被修复了。
- 每一次修复都给出了与准确率或公平性相关的理由。
反思
输入时会保存在这台设备上
请不要写私人信息。你的回答只保存在这个浏览器里,不会发送到任何地方。
小结
重复项、错误标签和类别不均衡都会损害模型;修复它们能得到干净、均衡的数据,从而提高准确率,并帮助模型公平地泛化。
- 删除重复项,别让任何一个样例分量过大。
- 改正错误标签,别让模型学到假的规律。
- 让类别均衡,好让模型学会每一类并公平地泛化。
七至八年级延伸内容
当你没法收集更多数据时
通过补充稀少类别的样例来实现均衡是最理想的,但有时你没那么容易收集到更多。另一个办法是把较多的那个类别削减到数量相当,尽管这意味着要丢掉一些真实的样例。
针对那张杂乱的水果表,说说你会选哪种做法(补充更多香蕉,还是删掉一些苹果),并解释每种选择在模型的准确率和公平性上各自做了什么取舍。
完成这一课
- Attempt the knowledge check(未完成)
- Save a reflection (recommended)(未完成)
先做一下知识检查,才能完成这一课。