Machine Learning Evaluation Metric--Binary Classification [机器学习评价标准--二分类]
如何准确的评价机器学习方法,经过长时间的摸索,目前有很多成熟的标准,包括Accuracy,Precision,Reall
介绍这些评价标准之前,先介绍混淆矩阵。在机器学习领域,混淆矩阵[confusion matrix],又称为可能性表格或是错误矩阵。它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习,本质上就是把所以可能性的结果都列出来。其每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容易的表明多个类别是否有混淆[也就是一个class被预测成另一个class]。所以对于二分类机器学习方法来说,混淆矩阵如下
Postive | Negative | |
---|---|---|
True | True Positive | True Negative |
False | False Postive | False Negative |
True Positive[真正,TP]: 将正类预测为正类数
True Negative[真负,TN]: 将负类预测为负类数
False Positive[假正,FP]: 将负类预测为正类数误报 [Type I error]
False Negative[假负,FN]: 将正类预测为负类数->漏报 [Type II error]
那么对于二分类机器学习方法,我们会得到如下结果矩阵
Yes | No | ||
---|---|---|---|
Yes | TP | FN | P[实际为yes] |
No | FP | TN | N[实际为no] |
Total | P'[被分类为Yes] | N'[被分类为No] | P+N or P'+N' [样本总数] |
就是如果把一个本应该是Yes的item分类为No,那么就是False Negative[之前笔者一直很难理解这个东西,拗口,现在却豁然开朗了]。比如,你把一个应该是Yes的item分类为No,你的分类就是negative[因为分类结果是No,这是一个negative的分类,如果分类结果是Yes,那么就是Positive]。好了,因为这个No的分类预测是错误的,所以是False Negative,如果这个分类结果是对的就是True Negative。同理,如果把一个应该是No的item预测为Yes,那么就是False Positive。[现在彻底理解了]
现在可以讨论评价标准了,这里我们使用一个具体场景为例子:
假如某个班级有男生80人, 女生20人, 共计100人。目标是找出所有女生[这里也就是说,Yes表示是女生,No表示不是女生]. 现在使用分类器进行分类,结果分类器判定60个人为男生,30个人为女生。这30个判定为女生的人中确实包括所有20个女生, 但是它还错误的另外10个男生也分类成了女生。剩下的另外70个人被分类器归为男生,也确实都是男生。
Accuracy [准确率]
\[ACC = \frac{TP+TN}{TP+TN+FP+FN}\]根据定义也就是分类器正确分类的样本数与总样本数之比,所以在这个例子中,分类器正确的分类了70个男生和20个女生,所以$ACC = (70+20)/100$。
准确率是最常见的评价指标,就是被分类预测对的样本数量除以所有的样本数,通常来说,正确率越高,分类器越好。但是有时候准确率高并不能代表一个算法就好,因为错误的发生率太低,但是一旦发生就是致命的错误。比如某个地区某天地震的预测,假设我们有一堆的特征作为地震分类的属性,类别只有两个:[No:不发生地震, Yes:发生地震]。一个不加思考的分类器,对每一个测试用例都将类别划分为No,那么它就可能达到99.99%的准确率,因为可能二十年都不会发生一场地震。但真的地震来临时,这个分类器毫无察觉,这个分类带来的损失是巨大的。为什么99.99%的准确率的分类器却不是我们想要的,因为这里数据分布不均衡,Yes的数据太少,完全错分类依然可以达到很高的准确率却忽视了我们关注的东西。在正负样本不平衡的情况下,准确率这个评价指标有很大的缺陷。比如在互联网广告里面,点击的数量是很少的,一般只有千分之几,如果用acc,即使全部预测成负类[不点击]acc也有99%以上,没有意义。因此,单纯靠准确率来评价一个算法模型是远远不够科学全面的。这就有了后面的recall
Precision [精确率]
\[P = \frac{TP}{TP+FP}\]Precision主要表述的是,所有被分类为Yes的样本中,有多少被正确分类。这个标准是对预测结果而言的,比如例子中目标是找出所有女生,那么结果就是被正确分类的女生占所有被分类成女生的人数的比例,也就是Precision = (20)/(20+10) = 66.6%
Recall [召回率]
\[recall=\frac{TP}{TP+FN}=\frac{TP}{P}\]Recall有时也叫sensitive,它描述的是一个算法的覆盖面,测量有多个yes的item被分为yes。这个标准是对样本本省而言的,比如例子中目标是找出所有女生,那原来的样本中女生有20个,这20个女生也确实都被分类成了女生,并没有任何一个女生被分为男生,recall = (20)/(20+0) = 100%。
但是在刚才那个地震的例子中,算法的Recall就是0。
F1
F1就是精确值[Precision]和召回率[Recall]的调和均值[harmonic mean], 也就是:
\[\frac{2}{F1} = \frac{1}{P} + \frac{1}{R}\]