评价指标

单一数字评价原则

为了简化我们的工作,我们在不同的阶段来评价一个模型,要定义一个单一的数字。这样目标明确,便于优化。比如我们手写识别的例子你可以用Cost Function来作为你的单一评价指标。Cost Function 不光考虑的正确分类,还考虑了其他各个分类的概率。我们可以定义一个更简单的评价标准,就是正确率。它比Cost Function简单,也更直白。

单一数字评价原则的挑战

有时候我们的评价标准可能关心的并不是单一原则。比较经典的就是二分类问题里的查准率和查全率。
举一个例子:比如一个医院建立了一个癌症预测模型,10000个测试数据,其中有2个是癌症患者。如果你的模型预测出全部不是癌症患者。显然,它没什么用,但它的正确率却很高因为9998个人它都预测正确了。对于二分类问题,我们引入了查全率和查准率来帮我们验证模型的精度。

查准率(Precision)

模型预测为真的样例里,实际也为真的比例。我们用P来表示。

查全率(Recall)

实际为真的样例里,模型预测为真的比例。我们用R来表示。

可见对于一个二分类模型,我们关心的两个指标,但是我们想把它们统一到一个数字指标上,怎么办?简单的办法是查准率和查全率取平均值。实际上,有一个更科学的方法,就是F1指标:
F1=\frac{2}{\frac{1}{P}+\frac{1}{R}}

这样就把两个指标统一到一个指标F1上了。
你不必太纠结F1的公式。有时你可以根据你的业务模型来定义自己的多指标的统一方程,比如你要做一个优惠券发放的模型,获得一个用户有一定的收益,但是发放一个优惠券有一定的成本。这样你定义的单一数字评价标准就是为了收益最大化。

优化和满足

上边我们说我们可以把多个评价标准放到一个统一公式里,从而得到一个单一的数值型评价。这时你需要注意区分哪些指标是需要优化的,而哪些指标是需要满足的。
比如我们有时候在意一个模型score的时间。就是通过模型预测出结果的时间。同时我们也在意模型的精确性。我们需要统一耗时和精确性两个指标。如果我们简单的用线性加权来处理,比如 精确度5-时间3。这就不太合理,原因是在耗时低于100毫秒,对用户感知没有影响。但是精确度我们却是永远希望越高越好。在这个例子里时间就是一个满足条件,我们只需要设置一个阈值,比如小于100毫秒。而精确度是我们的优化的单一数值目标,前提是时间满足我们设置的阈值。

评价指标的更新

一旦你发现你的评价指标和真实的业务场景有区别,你就应该及时更新你的评价指标。比如你是做一个关于猫的图片推荐的图片。你的算法主要识别一张图片是否是猫,并且把猫的图片分发给那些订阅了的人。开始你关注的指标是正确率。但是你发现你选的最优算法会把一些色情图片当做猫并推荐给用户。这是违反法律的,并且你最初并未考虑到这个因素。这时你就需要更新你的评价指标。把对色情图片错误的判断给一个很大的惩罚来构成你新的评价指标。

数据集的划分

一般我们把数据集划分为训练集,开发集(也叫验证集),测试集。对于监督学习,这些数据都是提前打好label的。如果数据集较少,可以用60%,20%,20%的比例还划分,在数据集较大时,验证集和测试集的比例可减少,只要保证有几千个样例就可以了。

训练集

在设定好了超参数,开始运来建模的数据集叫做训练集。

验证集

你可以选择不同的算法,不同的超参数,来在训练集上建模,然后在验证集上进行验证。因为开发集上的数据并未用来训练模型,可以验证哪个算法,或者超参数更通用一些。

测试集

测试集是你通过开发集选出来的模型最终测试的数据集。

数据分布

一定要保证数据的分布在训练集,开发集,测试集上是一致的。举一个例子,不能用中年人的数据训练模型,用年轻人的数据来验证模型,最后用老年人的数据来测试模型。正确的做法是随机按比例把样例分配到训练集,开发集合和测试集。来保证不同数据集里的数据都有同样的分布。

1 对 “机器学习策略之二:如何设置评价指标以及划分训练集,开发集,以及测试集”的想法;

  1. 写得好。我都不知道Precision和 recall是这样翻译的。这两个值得变化和score的threshold有关系 。
    有一个小错误。 9998

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: