第二周 机器学习(ML)策略(2):2.2 清楚标注错误的数据

第一章、简介

 

 

第二章、清楚标注错误的数据

 

2.1、数据集中存在被错误标准的例子

 

  • 你的监督学习问题的数据由输入X和输出Y构成,如果你观察一下你的数据并发现有些输出标签Y是错的。
  • 这些输出标签 Y 是错的,表明你的数据有些标签是错的。那么我们是否值得花时间去修正这些标签呢?
  • 如图2-1所示,我们看看在猫分类问题中,图片是猫 Y=1不是猫Y=0。所以假设你看了一些数据样本 ,样本图片A其实是狗,但是被标记错成猫,所以图片A就是标记错误的例子,来表示你的学习算法输出了错误的 Y 值。
  • 但我要说的是,对于标记错误的例子,参考你的数据集在训练集或者测试集 Y 的标签,人类给这部分数据加的标签实际上是错的。
  • 如果你发现你的数据有一些标记错误的例子,你该怎么办?

 

此图像的alt属性为空;文件名为1-10.png

图2-1

 

2.2、训练集出现随机性的错误标记不用修复,但是出现系统性的标记错误就要修复

 

  • 首先,我们来考虑训练集,事实证明深度学习算法,对于训练集中的随机错误是相当健壮的,只要这些标记错误例子离随机错误不太远,有时可能做标记的人没有注意或者不小心按错键了。
  • 如果错误足够随机,那么放着这些错误不管可能也没问题,而不要花太多时间修复它们。
  • 当然,你浏览一下训练集,检查一下这些标签并修正它们也没什么害处,有时候修正这些错误是有价值的、有时候放着不管也可以,只要总数据集总足够大,实际错误率可能不会太高。
  • 我见过一大批机器学习算法训练的时候,明知训练集里有X个错误标签,但最后训练出来也没问题。
  • 我这里先警告一下,深度学习算法对随机误差很健壮,但对系统性的错误就没那么健壮了,所以比如说如果做标记的人一直把白色的狗标记成猫,那就成问题了。
  • 因为你的分类器学习之后会把所有白色的狗都分类为猫,但随机错误或近似随机错误,对于大多数深度学习算法来说不成问题。
  • 之前的讨论集中在训练集中的标记出错的例子,那么如果是开发集和测试集中有这些标记出错的例子呢?

 

2.3、开发集或测试集有必要统计标记错误

 

  • 如果你担心开发集或测试集上标记出错的例子带来的影响,他们一般建议你在错误分析时添加一个额外的列,这样你也可以统计标签 Y 错误的例子数。
  • 比如说也许你统计一下对100个标记出错例子的影响,所以你会找到 100个例子中你的分类器的输出和开发集的标签不一致
  • 有时对于其中的少数例子,你的分类器输出和标签不同,是因为标签错了,而不是你的分类器出错。
  • 如图2-2所示,你发现表格第98行标记的人漏了背景里的一只猫,所以那里打个勾 来表示例子98标签出错了。
  • 也许99行实际上是猫的画像而不是一只真正的猫,也许你希望标记数据的人将它标记为Y=0 而不是Y=1,然后再在对应位置打个勾。
  • 当你统计出其他错误类型的百分比后,就像我们在之前的视频中看到的那样,你还可以统计因为标签错误所占的百分比,你的开发集里的Y值是错的,这就解释了为什么你的学习算法,做出和数据集里的标记不一样的预测 1。

 

此图像的alt属性为空;文件名为1-11.png

图2-2

 

2.4、依据开发集的标记错误率,判断是否需要修正

 

  • 如图2-3,假如在开发集中统计出6%的标记误差,现在问题是,是否值得修正这6%标记出错的例子?
  • 我的建议是,如果这些标记错误,严重影响了你在开发集上评估算法的能力,那么就应该去花时间修正错误的标签。
  • 但是,如果它们没有严重影响到你用开发集评估成本偏差的能力,那么可能就不应该花宝贵的时间去处理。
  • 我给你看一个例子解释清楚我的意思,所以我建议你看 3 个数据来确定是否值得去人工修正标记出错的数据。
  • 1、看看整体的开发集错误率,在我们以前的视频中的例子,我们说也许我们的系统达到了90%整体准确度,所以有 10%错误率,那么你应该看看错误标记引起的错误的数量或者百分比。所以在这种情况下,6% 的错误来自标记出错,所以 10% 的 6% 就是 0.6%。
  •  注意:6%是100个例子里面的被错误标记的比例,0.6%是开发集上的整体错误率。
  • 也许你应该看看其他原因导致的错误,如果你的开发集上有 10% 错误,其中 0.6% 是因为标记出错,开发集剩下的错误率占 9.4%,是其他原因导致的比如把狗误认为猫。所以在这种情况下,我说有9.4%错误率需要集中精力修正,而标记出错导致的错误,是总体错误的一小部分而已(因此不建议修正标记错误,占的比例太少了,不影响整体性能)。所以如果你一定要这么做,你也可以手工修正各种错误标签,但也许这不是当下最重要的任务。
  • 我们再看另一个例子,假设你在学习问题上取得了很大进展,所以现在开发集错误率不再是10%了,假设你把错误率降到了2%。
  • 假如在开发集中标记错误还是6%,所以现在 如果你想检查一组标记出错的开发集图片,开发集数据有 2% 标记错误了,那么其中很大一部分 0.6 除以 2%,实际上变成 30% 标签而不是 6% 标签了。有那么多错误例子其实是因为标记出错导致的,所以现在其他原因导致的错误是 1.4%。
  • 当测得的那么大一部分的错误都是开发集标记出错导致的(30%),那似乎修正开发集里的错误标签似乎更有价值。
  • 如果你还记得设立开发集的目标的话,开发集的主要目的是,你希望用它来从两个分类器 A 和 B中选择一个,所以当你测试两个分类器 A 和 B 时,假如在开发集上一个有 2.1% 错误率,另一个有 1.9% 错误率,但是你不能再信任开发集了,因为它无法告诉你,B分类器是否A好.
  • 因为 0.6% 的错误率是标记出错导致的,那么现在你就有很好的理由去修正开发集里的错误标签,因为在B这个例子中标记出错,对算法错误的整体评估标准有严重的影响,而A的例子中标记出错对你算法影响的百分比还是相对较小的。

 

此图像的alt属性为空;文件名为1-12-1024x641.png

图2-3

 

2.5、开发集中标记错误率的修正建议

 

  • 现在如果你决定要去修正开发集数据,手动重新检查标签并尝试修正一些标签,这里还有一些额外的方针和原则需要考虑。
  • 如图2-4所示,首先建议一,我鼓励你不管用什么修正手段,都要同时作用到开发集和测试集上。我们之前讨论过为什么开发和测试集必须来自相同的分布,开发集确定了你的目标,当你击中目标后,你希望算法能够推广到测试集上,这样你的团队能够更高效的在来自同一分布的开发集和测试集上迭代。
  • 如果你打算修正开发集上的部分数据,那么最好也对测试集做同样的修正,以确保它们继续来自相同的分布(即修正错误标记)。所以我们雇佣了一个人来仔细检查这些标签,但必须同时检查开发集和测试集。
  • 其次建议二,我强烈建议你要考虑同时检验算法判断正确和判断错误的例子,要检查算法出错的例子很容易,只需要看看那些例子是否需要修正。但还有可能有些例子算法没判断对,那些也需要修正(要同时统计判断错、没判断对的例子)。
  • 如果你只修正算法出错的例子,你对算法的偏差估计可能会变大,这会让你的算法有一点不公平的优势,我们就需要再次检查出错的例子,但也需要再次检查做对的例子,因为算法有可能因为运气好,把某个东西判断对了。
  • 在图2-3的分类器B中,修正那些标签可能会让算法从判断对变成判断错。
  • 建议二不是很容易做到,所以通常不会这么做,通常不会这么做的原因是如果你的分类器很准确,那么判断错的次数比判断正确的次数要少得多,所以如果你的分类器有 98% 的准确度,那么就有2%是出错的,所以更容易检查 2% 数据上的标签;然而检查 98% 数据上的标签要花的时间长得多,所以通常不这么做,但也是要考虑到的

 

  • 最后建议三,如果你进入到一个开发集和测试集去修正这里的部分标签,你可以会、也可能不会去对训练集做同样的事情。
  • 还记得我们在其他视频里讲过,修正训练集中的标签其实相对没那么重要,你可能决定只修正开发集和测试集中的标签,因为它们通常比训练集小得多。
  • 你可能不想把所有额外的精力,投入到修正大得多的训练集中的标签,所以这样其实是可以的。
  • 我们将在本周晚些时候讨论一些步骤,用于处理你的训练数据集分布不同于开发集和测试集数据分布的情况。
  • 建议四,由于学习算法其实相当健壮,你的开发集和测试集来自同一分布非常重要,但如果你的训练集来自稍微不同的分布,通常这是一件很合理的事情,我会在本周晚些时候谈谈如何处理这个问题。

 

此图像的alt属性为空;文件名为1-13-1024x674.png

图2-4

 

2.6、深度学习优化过程需要加入人类的见解

 

  • 最后我讲几个建议,首先深度学习研究人员有时会喜欢这样说,“我只是把数据提供给算法,我训练过了并且效果明显“,这话说出了很多深度学习错误的真相。
  • 更多时候,我们把数据喂给算法,然后训练它,并减少人工干预、减少使用人类的见解。
  • 但我认为在构造实际系统时,通常需要更多的人工错误分析、更多的人类见解来架构这些系统。
  • 尽管深度学习的研究人员不愿意承认这点。

 

2.7、亲自分析错误例子,更容易找到优化方向或找到优先处理的任务

 

  • 不知道为什么,我看一些工程师和研究人员不愿意亲自去看这些例子,也许做这些事情很无聊,坐下来看 100 或几百个例子来统计错误数量。
  • 但我经常亲自这么做,当我带领一个机器学习团队时,我想知道它所犯的错误,我会亲自去看看这些数据,尝试和一部分错误作斗争。
  • 我想就因为花了这几分钟,或者几个小时去亲自统计数据,真的可以帮你找到需要优先处理的任务。
  • 我发现花时间亲自检查数据非常值得,所以我强烈建议你们考虑去做,如果那些机器在你的系统中,然后你想确定应该优先尝试哪些想法 或者哪些方向,这就是错误分析过程。
  • 在下一个视频中,我想分享一下错误分析是如何在启动新的机器学习项目中发挥作用的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值