1-5 什么时候该改变开发/测试集和指标?

什么时候该改变开发/测试集和指标?(When to change dev/test sets and metrics)

假设你在构建一个猫分类器,试图找到很多猫的照片,向你的爱猫人士用户展示,你决定使用的指标是分类错误率。所以算法A和B分别有 3%错误率和 5%错误率,所以算法A似乎做得更好。

但是,算法A由于某些原因,把很多色情图像分类成猫了。如果你部署算法A,那么用户就会看到更多猫图,因为它识别猫的错误率只有 3%,但它同时也会给用户推送一些色情图像,这是你的公司完全不能接受的,你的用户也完全不能接受。相比之下,算法B有 5%的错误率,这样分类器就得到较少的图像,但它不会推送色情图像。所以从你们公司的角度来看,以及从用户接受的角度来看,算法B实际上是一个更好的算法,因为它不让任何色情图像通过。

所以当这种情况发生时,当你的评估指标无法正确衡量算法之间的优劣排序时,在这种情况下,原来的指标错误地预测算法 A 是更好的算法这就发出了信号,你应该改变评估指标了,或者要改变开发集或测试集。在这种情况下,你用的分类错误率指标可以写成这样:

$Error = \frac{1}{{{m_{dev}}}}\sum\limits_{i = 1}^{{m_{dev}}} {I\{ y_{pred}^{(i)} \ne {y^{(i)}}\} }$

${m_{dev}}$是你的开发集例子数,$y_{pred}^{(i)}$表示预测值,其值为0或1,I这符号表示一个函数,统计出里面这个表达式为真的样本数,所以这个公式就统计了分类错误的样本。这个指标的问题在于它对色情图片和非色情图片一视同仁,但你其实真的希望你的分类器不会错误标记色情图像。比如说把一张色情图片分类为猫,然后推送给不知情的用户,他们看到色情图片会非常不满。

其中一个修改评估指标的方法是,添加一个权重系数${{w^{(i)}}}$:

$Error = \frac{1}{{{m_{dev}}}}\sum\limits_{i = 1}^{{m_{dev}}} {{w^{(i)}}} I\left\{ {y_{pred}^{(i)} \ne {y^{(i)}}} \right\}$

其中如果图片${x^{(i)}}$ 不是色情图片,则${{w^{(i)}}}$设置为1,如果图片${x^{(i)}}$ 是色情图片,则${{w^{(i)}}}$设置为10甚至是100,这样你赋予了色情图片更大的权重,让算法将色情图分类为猫图时,错误率这个项快速变大。

如果你希望得到归一化常数,在技术上,就是${{w^{(i)}}}$ )对所有i求和,这样错误率仍然在 0 和1 之间,即:

$Error = \frac{1}{{\sum {{w^{(i)}}} }}\sum\limits_{i = 1}^{{m_{dev}}} {{w^{(i)}}} I\left\{ {y_{pred}^{(i)} \ne {y^{(i)}}} \right\}$

加权的细节并不重要,实际上要使用这种加权,你必须自己过一遍开发集和测试集,在开发集和测试集里,自己把色情图片标记出来,这样你才能使用这个加权函数。

但粗略的结论是,如果你的评估指标无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标。这是定义评估指标的其中一种可能方式(上述加权法)。评估指标的意义在于,准确告诉你已知两个分类器,哪一个更适合你的应用。就这个视频的内容而言,我们不需要太注重新错误率指标是怎么定义的,关键在于,如果你对旧的错误率指标不满意,那就不要一直沿用你不满意的错误率指标,而应该尝试定义一个新的指标,能够更加符合你的偏好,定义出实际更适合的算法。

另外,如果你当前的指标和当前用来评估的数据和你真正关心必须做好的事情关系不大,那就应该更改你的指标或者你的开发测试集,让它们能更够好地反映你的算法需要处理好的数据。

假设你的两个猫分类器A和B,分别有用开发集评估得到 3%的错误率和 5%的错误率。或者甚至用在网上下载的图片构成的测试集上,这些是高质量,取景框很专业的图像。,但当你部署到手机应用时,算法作用到用户上传的图片时,那些图片取景不专业,没有把猫完整拍下来,或者猫的表情很古怪,也许图像很模糊,当你实际测试算法时,你发现算法B表现其实更好。 

posted @ 2018-10-23 08:32  刘-皇叔  阅读(440)  评论(0编辑  收藏  举报