欢迎回来 如果你想得到一个训练算法
来做人类可以做的任务 而且你所训练的算法
还没有达到人类的效果 你需要手动地检查算法中的错误 来得到你下一步该做什么 这个过程叫做错误分析 让我们从一个例子开始 假设你正在做一个猫分类系统
在验证集上 准确率达到90%的或错误率达到10% 假设这比你想象中的结果要差很多 也许你的一个队友
在看一些算法分错了的样本 并且发现它将狗误认为猫了 如果你看看这两只狗
也许它们看起来有点像猫 至少乍看之下是这样 所以也许你的队友会来给你一个建议 如何使算法更好
特别是在狗身上 对吗 你可以有侧重点 收集更多狗的图片 或设计针对狗特有的特征之类的 为了使猫分类器在狗上表现更好 所以 它不再将狗误判为猫 所以问题是 你是否应该继续 并且开始一个项目侧重于狗的问题 可能要花费好几个月来使你的算法 在狗的照片上犯少一些错误 而这值得你努力吗 与其花几个月做这个 最终却发现 这没有很大帮助。 这个错误分析的方法
可以让你很快地判断 值不值得这么做 所以 我的建议是 首先 拿大约100张分类错误的验证集图片
并进行手动检测 只需要数一数 看有多少张 验证集中标错的样本实际上是狗的图片 现在 假设事实证明 在验证集中分错的100张样本里
有5%是狗的图片 也就是说 验证集中
分错的100张中有5张是狗 这意味着在这100张图片中 特指你分错的这100张 即使完全解决狗的问题
也只在这100张中多分对了5张 换言之 若只有5%的错误是狗照片 如果你在狗的问题上花了大量时间 最好的情况也就是 你的错误率 从10%下降到9.5% 对吗 这5%是错误里的相对下降值
因此是从10%下降到9.5% 那么你可能可以合理地判断出
这样并不是最好的利用时间的方式 也有可能是
但至少给了你一个上限 通过处理狗的问题能提高多少准确率 对吗? 在机器学习中 有时我们把这称为表现上限 意思是最好的情况是什么 关注狗的问题能有多大的帮助 但是现在 假设有别的事情发生了 假设 在验证集里错标的100张样本中 你发现他们中的50张实际上是狗的图像 所以50%是狗的照片 现在你可以更确定地把时间花在狗的问题上 在这种情况下 如果你真的解决了狗的问题 你的错误率可能将从这10%下降到5% 你可能会认为错误率减半是值得付出努力的 专注于减少被错误标识的狗 我知道在机器学习中 有时我们会贬低 手动操作或使用太多人工判断 但是如果你在构建应用系统
那么这个简单的计数过程 也就是错误分析 可以节省你很多时间 在决定什么是最重要的 或哪个方向最有希望 值得关注 实际上 如果你想检查一下错误标记的验证集 也许只需要花5到10分钟 人工浏览100张图片 并数出它们中有多少是狗 再根据结果看 是5% 还是50% 还是别的 这只需要5到10分钟 能够评估这方向是否值得花时间 并可以帮你作更好的决定 是否要在接下来的几个月中
集中精力解决 被错误标识的狗的问题 在这页讲义中 我们讲了使用错误分析来评估 一个思路 这里指狗
是否值得实行 有时你也可以评估多个思路
通过并行的错误分析 例如 假设你有好几个
改进你的猫检测器的思路 也许可以提高对狗的识别 也许你会注意到有时候所谓的"大猫" 如狮子、豹、猎豹等 他们被认为是小猫或家猫 所以你也可以尝试解决这个问题 也许你会发现你的一些图像是模糊的 也可以设计一些方法
使模糊图像能被更好的检测 也许你对这方面有一些思路 因此 如果用错误分析
来评估这三种思路 我的做法就是创建一个这样的表 我通常在电子表格中做这个 但使用普通的文本文件也可以 在左边 这将遍历你计划手动查看的图像集 如果你看100张图片 就从1到100 而电子表格上的列 对应你要评估的几个思路 所以是 狗的问题 大猫的问题
以及模糊的图像 我通常还会在电子表格中留出空间来写评论 所以请记住 在错误分析中 只看验证集里
你的算法判断错误的样本 所以 如果你发现
第一个误判的图像是一张狗的图片 然后我会在那里打个勾 为了帮助自己记住这些图像 有时我会在评论中做一个注解 也许那是个斗牛犬的照片 如果第二张图片是模糊的
就在那做个标记 如果第三个误判的是一只
动物园雨天里的狮子 那就是一只大猫 并且模糊的数据 在备注里写上 在动物园的雨天 是雨使它模糊不清等等 最后 看完了这些图片 我将计算出这些算法的百分比 或者这些错误类别的百分比
因为狗的 或大猫的 或模糊的 你检测的图片中也许8%的是狗 43%是大猫 61%是模糊的 所以这就意味着每列下来 计算在该列中有标记的图像的百分比 当你在这个过程中 有时你会发现其他类别的错误 例如 你发现Instagram的风格滤镜 那些花哨的图像滤镜
也迷惑了你的分类器 在这时候, 事实上没关系 在这过程中另加一列 给颜色滤镜 Instagram滤镜 和Snapchat滤镜 然后也把这些数出来 计算出这个新错误类别的百分比是多少 这个过程的结论会给你一个估计值 这些不同类别的错误 有多少处理价值 这个例子里 我们在模糊图片中有非常多错误 大猫图像上也有不少 因此 这个分析的结果不是
你必须处理模糊的图像 这不给你一个严格的数学公式
告诉你该怎么做 但它给你一个最好的参考做法 它也告诉你 例如 不管你在狗或Instagram的图像上
做得有多好 在这示例中 你最多只能提高
8%或12%的准确率 而你可以针对大猫图像或 模糊图像能有更好的结果 现在这个能提高多少准确率的上限值 要高得多 根据你有多少想法
来提高对大猫的判断 来处理模糊图片 你可以选其中一个
如果你队伍中有足够的人手 你可以分成两个不同的团队 一个改善大猫的误判 另一个团队改善模糊图片的误判 但这个计数过程通常很快 你最多只需要几小时的时间 它可以真正帮你做出更好的优先决策 并且了解不同方法的潜力 综上所述 要进行错误分析
你应该找到一套 在你验证集中错误标识的样本 并按假阳性和假阴性来看 并计算不同类别中的 误判个数 在此过程中 可能会促使你
提出新的错误类别 就像我们看到的 当你浏览样本的时候 有很多Instagram滤镜 或者Snapchat滤镜 他们也搞乱了分类 您可以在过程中创建新类别 但通过对不同类中错误标识的例子计数 通常这将有助于你判断优先级 或给你新方向的灵感 当你在做错误分析时 有时你会注意到在开发集中有些是错误标签的 那你该怎么办呢 我们将会在下节探讨这一问题