何时修改开发集、测试集和指标
每当开展一个新项目时,我会尽快选好开发集和测试集,因为这可以帮团队制定一个明确的目标。
我通常会要求我的团队在不到一周(一般不会更长)的时间内给出一个初始的开发集、测试集和指标,提出一个不太完美的方案并迅速执行 ,这比起花过多的时间去思考要好很多。但是一周的时间要求并不适用于成熟的应用程序,譬如垃圾邮件过滤。我也见到过一些团队在已经成熟的系统上花费数月的时间来获得更好的开发集和测试集。
如果你渐渐发现初始的开发集、测试集和指标设置与期望目标有一定差距,那就尽快想办法去改进它们。例如你的开发集与指标在排序时将分类器 A 排在 B 的前面,然而你的团队认为分类器 B 在实际产品上的表现更加优异,这个时候就需要考虑修改开发集和测试集,或者是你的评估指标了。
在上述例子中,有三个主要原因可能导致开发集/评估指标错误地将分类器A排在B前面:
- 你需要处理的实际数据的分布和开发集/测试集数据的分布情况不同。
假设你的初始开发集和测试集中主要是成年猫的图片,然而你在 app 上发现用户上传的更多是小猫的图片,这就导致了开发集和测试集的分布与你需要处理数据的实际分布情况不同。在这种情况下,需要更新你的开发集和测试集,使之更具代表性。
- 算法在开发集上过拟合了。
在开发集上反复评估某个想法会导致算法在开发集上 “过拟合” 。当你完成开发后,应该在测试集上评估你的系统。如果你发现算法在开发集上的性能比测试集好得多,则表明你很有可能在开发集上过拟合了。在这种情况下,你需要获取一个新的开发集。
如果需要跟踪团队的进度,你可以每周或者每月在测试集上对系统进行一次定期评估。但不要根据测试集指标对算法做出任何决策,包括是否将系统回滚到前一周的状态。坚持这样做会导致算法在测试集上开始过拟合,并且不要再指望通过测试集对你的系统性能进行完全无偏估计(这对发表研究论文以及需要做出商业决策的人来说影响很大)。
- 该指标不是项目应当优化的目标。
假设你的猫咪 app 当前的指标为分类准确率,而该指标认为分类器 A 优于分类器 B。然而在尝试了两种算法后,你发现分类器 A 竟然允许出现一些色情图片,这实在是难以容忍。应该怎么办呢?
以上这种情况表明,此时的指标并不能辨别出算法 B 在实际产品中的表现是否比 A 更好,因此根据该指标来选择算法并不可靠,也说明此时应该改变现有的评估指标。你可以选择修改指标,使之对出现色情图片的情况执行严重惩罚。此外,强烈建议你选择一个新的指标并为你的团队制定一个新的研究目标,而不是在不可信的指标上耗费太多的时间,最终导致不得不回过头对分类器进行人工选择。
在项目中改变开发集、测试集或者指标是很常见的。一个初始的开发集、测试集和指标能够帮助团队进行快速迭代,当你发现它们对团队的导向不正确时,不要担心,你只需要对其进行修改并确保团队能够了解接下来的新方向。