机器学习-常用指标总结

参考链接

  • http://www.cnblogs.com/maybe2030/p/5375175.html#_label0
  • http://alexkong.net/2013/06/introduction-to-auc-and-roc/

精确率 Precision, 召回率 Recall 和 F1 值

对于数据不均衡时,使用accuracy是不准确的。

举个栗子:

a million tweet: 999,900条不是关于pie的,只有100条是关于pie的

对于一个stupid分类器,他认为所有的tweet都是跟pie无关的,那么它的准确率是99.99%!但这个分类器显然不是我们想要的,因而accuracy不是一个好的metric,当它目标是rare,或是complete unbalanced.

引入另外两个指标:

  • 精度 precision: 是检索出来的条目(比如:文档、网页等)有多少是准确的。精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率。

  • 召回 call: 召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率.

需要先确定一个正分类: 这里需要检索出来的是与 pie 无关的,也就是与 pie 无关的是正分类。那么精度就是分类器检测出来的正分类中 gold pos 所占的比例,那么 precision = 0/(0+0)

这里需要检索的是与 pie 无关的,检索出来的 true pos 占样本中 gold pos 的比例,那么 recall = 0/(100+0) = 0.

总结下来,precision 和 recall 都是以 true pos 作为分子,precision 是以分类器预测出来的 pos(true pos + false neg) 作为分母,所以是差准率. recall 则是以总的 gold pos(true pos + false neg) 作为分母,所以是查全率。

当然希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要自己判断希望Precision比较高或是Recall比较高。如果是做实验研究,可以绘制Precision-Recall曲线来帮助分析。

F-measure

\[F_{\beta}=\dfrac{(\beta^2+1)PR}{\beta^2P+R}\]

\(\beta>1\)时,Recall的比重更大;当 \(\beta<1\)时,precision的比重更大。使用最多的是 \(\beta=1\),也就是 \(F_{\beta=1}, F_1\). \(\beta\) 的的取值取决于实际应用。

\[F_1 = \dfrac{2PR}{P+R}\]

F-measure 是 precision 和 recall 的 加权调和平均值(weighted harmonic mean)

调和平均值是倒数的算术平均值的倒数。

为什么要使用调和平均值呢?因为它是一个更 保守的度量(conservative metric). 相比直接计算 P 和 R 的平均值, F-measure的值更看重两者中的较小值。

ROC曲线和AUC

考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。

  • TPR, 真正类率(true positive rate ,TPR),: 如果一个实例是正类并且也被 预测成正类,即为真正类(True positive),真正类率是指分类器所识别出来的 正实例占所有正实例的比例。就是 Recall 吧~ TPR = TP / (TP + FN)
  • FPR, 负正类率: 分类器错认为正类的负实例占所有负实例的比例,FPR = FP / (FP + TN)
  • TNR, 真负类率: 分类器认为负类的负实例占所有负实例的比例,也就是负类的 Recall 吧~ TNR = TN /(FP + TN) = 1 - FPR

为什么要引入 ROC 曲线

  • Motivation1:在一个二分类模型中,对于所得到的连续结果,假设已确定一个阀值,比如说 0.6,大于这个值的实例划归为正类,小于这个值则划到负类中。如果减小阀值,减到0.5,固然能识别出更多的正类,也就是提高了识别出的正例占所有正例 的比类,即TPR,但同时也将更多的负实例当作了正实例,即提高了FPR。为了形象化这一变化,引入ROC,ROC曲线可以用于评价一个分类器。

  • Motivation2:在类不平衡的情况下,如正样本90个,负样本10个,直接把所有样本分类为正样本,得到识别率为90%。但这显然是没有意义的。单纯根据Precision和Recall来衡量算法的优劣已经不能表征这种病态问题。

ROC 曲线

前面已经说道,对于数据不均衡的情况下,precision 和 recall 不足以表征这类问题,就比如上面的例子中,把找出不关于 pie 的 tweet看作是正类,那么它的 精度和召回率 都很高。所以引入 ROC

因为我们要关注的是正类,所以关注指标是 真正类率 TPR 和 负正类率 FPR,真正类率越高越好,负正类率越低越好。但显然这两者之间是矛盾的,与分类器的阈值有关,ROC 就是用来表征阈值与 TPR 和 FPR 之间的关系曲线。

ROC(Receiver Operating Characteristic)翻译为“接受者操作曲线”。曲线由两个变量1-specificity 和 Sensitivity绘制. 1-specificity=FPR,即负正类率。Sensitivity即是真正类率,TPR(True positive rate),反映了正类覆盖程度。

为了更好地理解ROC曲线,我们使用具体的实例来说明:
如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。
不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。

我们以FPR为横轴,TPR为纵轴,得到如下ROC空间。

参考链接中 ROC 曲线的解释: http://www.cnblogs.com/maybe2030/p/5375175.html#_label0

上面的图表示,分类器对于 pos 和 neg 的分别是有个阈值的,阈值很高,也就是 A 处,显然它的 TPR 不会很高,阈值越低,TPR 越高。 但是阈值很低的话,预测为正类的负实例也就越多, FPR 也会越高。

曲线距离左上角越近,证明分类器效果越好。我们用一个标量 AUC 来量化这个分类效果。

怎么得到 ROC 曲线

我们知道对一个二值分类器,其预测出来的正类的 score 是一个概率。当一个样本为正类的概率大于 threshold时,我们判别它为正类。所以不同的 threshold,其对应的 TPR 和 FPR 的值也就不一样,这样就得到了 ROC 曲线。

详细可参考:ROC和AUC介绍以及如何计算AUC 非常清楚!!!

AUC

AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

  • AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
  • AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
  • AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

AUC的物理意义:假设分类器的输出是样本属于正类的socre(置信度),则AUC的物理意义为,任取一对(正、负)样本,正样本的score大于负样本的score的概率。

怎么计算 AUC

AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

代码实现: sklearn.metrics.roc_auc_score

置信度和置信区间

这里好像跟置信度和置信区间没啥关系。。。但是了解下也没事 #### 置信区间 再来理解置信度,首先要理解 95%置信区间 和 置信度。

知乎:95%置信区间 我的理解就是,首先总体均值是固定的,但只有上帝知道。我们就要用样本去估计总体均值。一次次抽样会得到很多样本均值,但是我们无法判断哪个均值最好,最接近总体均值。于是,我们构造区间来看这个区间是否含有总体均值。

怎么构造区间:
通过一次次抽样得到的样本均值:
\[M=\dfrac{X_1 + X_2+...+X_n}{n}\] 根据大数定律:
\[M\sim N(\mu,\dfrac{\sigma^2}{n})\]

通过查表 标准正太分布表可知,这样可以计算出置信区间,(如果方差为止,则用样本方差代替)

我们以 \(1.96\dfrac{\sigma }{\sqrt{n}}\) 为半径做区间,就构造出了 \(95\%\) 置信区间。按这样去构造的100个区间,其中大约会有95个会包含 \(\mu\)

那么,只有一个问题了,我们不知道、并且永远都不会知道真实的 \(\mu\) 是多少: 我们就只有用 \(\hat{\mu }\) 来代替 \(\mu\)\[P(\hat \mu-1.96\dfrac{\sigma}{n}\le M\le\hat \mu+1.96\dfrac{\sigma}{n}) = 0.95\]

这样可以得到置信区间了。如果抽样100次,对应也就有100个置信区间,那么其中含有总体均值的概率约为 95%.

置信度

样本数目不变的情况下,做一百次试验,有95个置信区间包含了总体真值。置信度为95%