二分类评估是对二分类算法的预测结果进行效果评估。本文将构造出一个水泊梁山的具体实例带领你们梳理相关概念。html
笔者最近在研究Alink源码,原本计划分析二分类评估,结果打开Alink相关文档发现里面给出很多概念和公式。因而本文先带领你们一块儿复习/熟悉其中部分概念和公式,为后续分析源码打下良好的基础。java
如下是Alink中 “二分类评估” 的说明。算法
支持Roc曲线,LiftChart曲线,Recall-Precision曲线绘制。app
流式的实验支持累计统计和窗口统计。机器学习
给出总体的评估指标包括:AUC、K-S、PRC, 不一样阈值下的Precision、Recall、F-Measure、Sensitivity、Accuracy、Specificity和Kappa。函数
这些概念基本都是评价指标,这是针对模型性能优劣的一个定量指标。一种评价指标只能反映模型一部分性能,若是选择的评价指标不合理,那么可能会得出错误的结论,故而应该针对具体的数据、模型选取不一样的的评价指标。性能
接下来就分析梳理其中部分概念。学习
宋江对蒋敬说:贤弟你是神算子,快帮哥哥想一想如何可以找出与大和尚有串联的人,测试
蒋敬说:哥哥这个要求是 “二分类问题”(例如预测患或未患心脏病、股票涨或跌等这种只有两类状况的问题),里面门道甚多,哥哥且听我慢慢道来。.net
蒋敬说:首先小弟介绍的概念是混淆矩阵,这是一个 2 维方阵,它主要用于评估二分类问题的好坏。
针对一个二分类问题,即将实例分红正类(positive)或负类(negative),在实际分类中会出现如下四种状况:
TN (True Negative ):算法预测为负例(N),实际上也是负例(N)的个数,即算法预测对了(True)。
FP (False Positive ):算法预测为正例(P),其实是负例(N)的个数,即算法预测错了(False)
这里指的是:实际为负例但被分类器划分为正例的实例数。
FN (False Negative ):算法预测为负例(N),其实是正例(P)的个数,即算法预测错了(False)
这里指的是:即实际为正例但被分类器划分为负例的实例数。
TP (True Positive ):算法预测为正例(P),实际上也是正例(P)的个数,即算法预测对了(True)。
宋江道:如此说来,“与鲁智深有关联人” 就是 TP + FP了。
蒋敬说:哥哥误会了,实际为正例的样本数应该是 TP + FN。
这里有个记忆诀窍听小弟道来。
记忆诀窍是 :这 4 个定义由两个字母组成:
因此再次澄清:
混淆矩阵是把真实值和预测值相对应的样本数量列出来的一张交叉表。这样,全部正确的预测结果都在其对角线上,因此从混淆矩阵中能够很直观地看出哪里有错误。
矩阵的每一行是样本的预测分类,每一列是样本的真实分类(反过来也能够)。
预测值 0 (与鲁智深无关联) | 预测值 1 (与鲁智深有关联) | |
---|---|---|
真实值 0 (与鲁智深无关联) | TN | FP |
真实值 1 (与鲁智深有关联) | FN | TP |
记忆方法:真实值更重要,因此真实值处在第一个维度,就是行。
蒋敬说:小弟介绍的第二个概念是准确率 Accuracy。这 Accuracy 指的是预测正确的样本数量占总量的百分比。
按照咱们上文的定义:第 1 个字母表示算法预测正确或者错误,第 2 个字母表示算法预测的结果。
因此分母是所有四种数据;分子中第一个字母是 T 表示 "算法预测正确了"。
准确率有一个缺点,就是数据的样本不均衡,这个指标是不能评价模型的性能优劣的。
假如一个测试集有正样本99个,负样本1个。咱们设计的模型是个无脑模型,即把全部的样本都预测为正样本,那么模型的Accuracy为99%,看评价指标,模型的效果很好,但实际上模型没有任何预测能力。
蒋敬说:小弟介绍的第三个概念是精准率,又称为查准率,就是 “预测为正例" 的那些数据里 "预测正确" 的数据个数。即在模型预测为正样本的结果中,真正是正样本所占的百分比。或者说是 在预测为正样本的结果中,有多少是准确的。
按照咱们上文的定义:第 1 个字母表示算法预测正确或者错误,第 2 个字母表示算法预测的结果。
因此分母中, TP表示 : 算法预测正确 & 预测的是正例,FP表示 : 算法预测错误 & 预测的是正例(实际是负例)
这个指标比较谨慎,分类阈值较高。
须要尽量地把所需的类别检测准确,而不在意这些类别是否都被检测出来。好比对于罪犯的预测,咱们但愿预测结果是很是准确的,即便放过了一些真正的罪犯,也不能错怪一个好人。
宋江说,贤弟这两个中文词长得也太像太坑爹了,哥哥我很难区别。
蒋敬说:哥哥,这两个词是从英文翻译过来的,咱慢慢推敲。
让咱们看看其英文原意。
Accuracy首先是correct(正确),而precision首先是exact(精确,或者说确切)。首先准确,而后才谈得上精确。一个结果必需要同时符合准确与精密这两个条件,才可算是精准。
这两个词也 有点相似 误差(bias)与方差(variance)
宋江说,贤弟你这误差,方差的,哥哥也听着像天书。
蒋敬说:待小弟给哥哥找一个合适的例子。
好比大概能够类比成咱射箭,准确率要看你射中靶心的几率;精准率要看你射中的是靶心区域的哪一个位置。
这是针对原始样本而言的一个评价指标。召回率又称为查全率,就是在实际为正样本中,被预测为正样本所占的百分比。 即全部正例中,有多少被正确地断定为正。
按照咱们上文的定义:第 1 个字母表示算法预测正确或者错误,第 2 个字母表示算法预测的结果。
因此分母中 TP+FN ,表示 “预测正确且预测为正样本“ + “预测错误且预测为负样本(实际是真实正例)“。即 全部 "实际为正例" 的样本数
分子是:预测正确 且 被预测为正样本。
召回率分类阈值较低。尽可能检测数据,不遗漏数据,所谓的宁可错杀一千,不愿放过一个。
咱们看看英文解释,Recall : to remember sth; to make sb think of sth; to order sb to return; to ask for sth to be returned, often because there is sth wrong with it。
由于Recall有记忆的意思,因此能够试着把 Recall 理解为“记忆率”。就是记忆一个事件须要多少细节,这个细节就是当咱们问检索系统某一件事的全部细节时(输入检索query),检索系统能“Recall 回忆”起那些事的多少细节,通俗来说就是“回忆的能力”。能回忆起来的细节数 除以 系统知道这件事的全部细节,就是“记忆率”,也就是recall——召回率。
召回率的应用场景是:须要尽量地把所需的类别检测出来,而不在意结果是否准确。
好比对于地震的预测,咱们但愿每次地震都能被预测出来,这个时候能够牺牲precision。假如一共发生了10次地震,咱们情愿发出1000次警报,这样能把这10次地震都涵盖进去(此时recall是100%,precision是1%),也不要发出100次警报,其中有8次地震给预测到了,但漏了2次(此时recall是80%,precision是8%)。
sensitive = TP / P,表示的是全部正例中被分对的比例,衡量了分类器对正例的识别能力;能够看到,sensitive和Recall是同样的。
宋江说,贤弟你给哥哥好好解释下精准率 和 召回率这两个概念
蒋敬说:待小弟慢慢道来。
首先,用一个图例来看看概念区别,图中椭圆就是 “预测为正类” 的样本。也能看出两个概念的定义。
召回率是覆盖面的度量,度量有多个真实正例被预测为正例。精度是精确性的度量,表示被预测为正例的示例中实际为正例的比例。
在不一样的应用场景下,咱们的关注点不一样,例如:
在信息检索中,准确率和召回率是互相影响的,虽然二者都高是一种指望的理想状况,然而实际中经常是若是阈值较高,那么精准率会高,可是会漏掉不少数据;若是阈值较低,召回率高,可是预测的会很不许确。因此在实际中经常须要根据具体状况作出取舍,例如:
宋江说,看到这里,我就有一个疑问了,为何准确率和召回率是互相影响的?
蒋敬说:这个问题比较复杂
首先说大体原理。
蒋敬说:具体用真实数听说明最好,咱就真实操做下。
样本全体:林冲,武松,史进,杨志,张青,孙二娘,呼延灼,关胜,石秀,杨雄。
这些好汉将会被分红四类:
咱们再次看看混淆矩阵:
预测值 0 (与鲁智深无关联) | 预测值 1 (与鲁智深有关联) | |
---|---|---|
真实值 0 (与鲁智深无关联) | TN | FP |
真实值 1 (与鲁智深有关联) | FN | TP |
首先咱们看,为何要有召回率这个指标?
在梁山好汉中查找和鲁智深有关联的人。好比有18人和鲁智深有关联,90人和鲁智深没关联。
咱们作个算法作预测:就是全部好汉都预测为没联系。这样,90个确定预测对了,看着准确率很高。
可是这个算法对于“和鲁智深有关联的人”的预测准确率是0,因此这个算法是没有任何意义的。
因此就要引入Recall。Recall就是在这18个中能找出来的,好比找出12个,则recall = 66%。
下面咱们回顾下定义:
为何相互制约?
蒋敬首先定的 "查找策略"是:桃花山 + 军官。这个容易理解,鲁智深是在桃花山落草,且自己是提辖,可能和宋军将领有私交。
获得以下混淆矩阵
预测值 0 (与鲁智深无关联) | 预测值 1 (与鲁智深有关联) | |
---|---|---|
真实值 0 (与鲁智深无关联) | TN 石秀,杨雄,裴宣,汤隆,刘唐,陶宗旺 | FP 关胜,呼延灼 |
真实值 1 (与鲁智深有关联) | FN 史进,杨春,陈达,周通 | TP 武松,杨志,张青,孙二娘 |
因而推算出:
Precision = TP / (TP + FP) = 4 / (4 + 2) = 2/3 Recall = TP / (TP + FN) = 4 / (4 + 4) = 1/2
宋江道:找到的相关人太少,咱们得提升召回率(查全率)。
追求 召回率(查全率)意味着样本中全部相关的好汉,被查找到的越多越好,那就应该放宽“查找策略”。放宽“查找策略”时,每每也会伴随出现一些不相关的结果,从而使准确率受到影响。
因而公明哥哥须要放宽“查找策略” :少华山史大郎和鲁智深之前结拜过;鲁智深之前在"老种经略相公"麾下,种师道统帅陕西,因此鲁智深可能和西北人有交往。
放宽后的 "查找策略" 是:桃花山 + 少华山 + 军官 + 西北人(裴宣,汤隆,刘唐,陶宗旺)
因而获得混淆矩阵是:
预测值 0 (与鲁智深无关联) | 预测值 1 (与鲁智深有关联) | |
---|---|---|
真实值 0 (与鲁智深无关联) | TN 石秀,杨雄 | FP 关胜,呼延灼,裴宣,汤隆,刘唐,陶宗旺 |
真实值 1 (与鲁智深有关联) | FN 周通 | TP 武松,杨志,张青,孙二娘,史进,杨春,陈达 |
因此获得
Precision = TP / (TP + FP) = 7 / (7 + 6) = 7/13 ---- 下降 Recall = TP / (TP + FN) = 7 / (7 + 1) = 7/8 ---- 提升
能够看出来,但愿提升TP,下降FN,因此放宽“查找策略”,致使FP也增长了。
宋江道:找到的相关人太多了,咱们得提升精准率。
但愿 去除查找结果中的不相关好汉 。这时务必要将“查找策略”定的更加严格,这样也会使有一些相关的好汉再也不能被查找到,从而使召回率受到影响。
因此要增强 "查找策略",新的 "查找策略"是:桃花山好汉中,男的。
因而获得混淆矩阵是:
预测值 0 (与鲁智深无关联) | 预测值 1 (与鲁智深有关联) | |
---|---|---|
真实值 0 (与鲁智深无关联) | TN 石秀,杨雄,裴宣,汤隆,刘唐,陶宗旺, 关胜,呼延灼 | FP |
真实值 1 (与鲁智深有关联) | FN 周通,孙二娘,史进,杨春,陈达 | TP 武松,杨志,张青 |
因此获得
Precision = TP / (TP + FP) = 3 / (3 + 0) = 3/3 ---- 提升 Recall = TP / (TP + FN) = 3 / (3 + 5) = 3/8 --- 下降
能够看出来,但愿提升TP,下降FP,因此增强“查找策略”,致使FN也增长了。
宋江道:精准率和召回率看来是此消彼长的,这便如何是好? 蒋敬说:咱们有其余指标能够考虑,好比 F1 Score
在一些场景下要兼顾精准率和召回率,就有 F1 score。F1值就是精确值和召回率的调和均值。
precision必定状况下反映了模型控制假阳 FP 个数的能力,Recall 值反映了正样本的检出率,F1 值综合了两方面。
其实 F1 score 是精准率和召回率的调和平均数,调和平均数的性质就是,只有当精准率和召回率两者都很是高的时候,它们的调和平均才会高。若是其中之一很低,调和平均就会被拉得接近于那个很低的数。
为何?由于调和平均值上面是一个乘积,因此其更接近较小值,这样查准率或查全率中哪一个值较小,调和平均值就更接近这个值,这样的测量指标更严格。
记忆方法:金龙鱼调和油。
在precision和recall二者要求一样高的状况下,能够用F1来衡量。
最后介绍个四胞胎,他们长得特别容易混淆。
真正率 True Positive Rate,TPR = TP / (TP+FN);
刻画的是被分类器正确分类的正实例占全部正实例的比例。即全部正例中,有多少被正确地断定为正。咱们能看到 TPR 就等于sensitivity。
假阳性率 / 假正率 False Positive Rate,FPR = FP / (TN+FP);
刻画的是在全部实际为负类的样本中,预测错误的比例,即全部负例中,有多少被错误地断定为正。在医学上又称误诊率(没有病的人被检测出有病),等于 1 - 特异性(Specificity)。
真负率 True Negative Rate, TNR= TN / N = 1 - FPR;
刻画的是被分类器正确分类的负实例占全部负实例的比例,也称为特异度(specificity)。衡量了分类器对负例的识别能力。
假阴性率 False Negative Rate,FNR = FN / (TP + FN);
这是在全部实际为正类的样本中,预测错误的比例,在医学上又称漏诊率(有病的人没有被检测出来),等于 1 - 灵敏性(Sensitivity)。
让咱们经过一张表格来总结下
缩写 | 中文名称 | 等同 | 医学意义 |
---|---|---|---|
TPR | 真正率 | Sensitivity | 越大越好,若是为1意味着医生医术高明,诊断全对 |
FPR | 假阳性率 | 1 - Specificity | 误诊率(没有病的人被检测出有病)。越小越好 |
TNR | 真负率 | Specificity | |
FNR | 假阴性率 | 1 - Sensitivity | 漏诊率(有病的人没有被检测出来) |
这里再介绍一个记忆诀窍:
TPR越大越好,FPR越小越好,但这两个指标一般是矛盾的。为了增大TPR,能够预测更多的样本为正例,与此同时也增长了更多负例被误判为正例的状况。
放在具体领域来理解上述两个指标。如在医学诊断中,判断有病的样本。
那么尽可能把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。
而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。
不难发现,这两个指标之间是相互制约的。若是某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,可是第二个指标也就相应地变高。最极端的状况下,他把全部的样本都看作有病,那么第一个指标达到1,第二个指标也为1。
(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。
(TPR > FPR),医生的判断大致是正确的。
(TPR = FPR), 中线上的点,也就是医生全都是蒙的,蒙对一半,蒙错一半;
(TPR < FPR),这个医生说你有病,那么你极可能没有病,医生的话咱们要反着听,为真庸医。
与recall和precision相互矛盾不一样,TPR和FPR呈正相关关系,也就是说TPR增大,FPR也会变大。咱们但愿TPR可以越大越好(为1),FPR越小越好(为0),但这一般是不可能发生的。
二分类算法的评价指标:准确率、精准率、召回率、混淆矩阵、AUC
查全率(Recall),查准率(Precision),灵敏性(Sensitivity),特异性(Specificity),F1,PR曲线,ROC,AUC的应用场景