二分类评价指标
wangzf / 2023-03-19
目录
混淆矩阵
混淆矩阵:
混淆矩阵及其相关指标:
错误率
- Error Rate:错误率
- 错误率是分类错误的样本数占样本总数的比例
定义:
其中:
- 为示性函数
- 为测试样本个数
- 表示样本 对应的真实标签
- 表示样本 对应的预测结果
准确率
- Accuracy:准确率
- 精度则为分类正确的样本数占样本总数的比例
定义:
其中:
- 为示性函数
- 为测试样本个数
- 表示样本 对应的真实标签
- 表示样本 对应的预测结果
针对准确率问题,目前常采用的损失函数为 Binary Log Loss/Binary Cross Entropy,其数学形式如下:
其中:
- 为模型对第 个样本的预测概率
查准率和查全率以及 F1
- Precision:查准率、精度
- Recall:查全率、召回率
- F1:F1 Measure / F1 Score
错误率和精度并不能满足所有任务中的需求。如在信息检索中, 经常会关心“检索出的信息中有多少比例是用户感兴趣的”(Precision)、 “用户感兴趣的信息中有多少被检索出来了”(Recall)。 需要查准率(Precision)和查全率(Recall)来进行此类需求的性能度量
二分类问题中,将样例根据真实类别与分类器预测类别的组合, 可以分为真正例(true positive)、假正例(false positive)、 真反例(true negative)和假反例(false negative)四种情形, 即 TP、FP、TN、FN,显然有 TP + FP + TN + FN = 样例总数
查准率
查准率,Precision
根据混淆矩阵,查准率 Precision 的定义为:
查准率是对于自己模型的预测而言的,它表示在所有预测的正例中预测正确的比例,即真正例的比例。 想提高查准率,可以只对自己有信心预测正确的样本进行预测,假如模型预测出一个正例而且为真正例, 其查准率为 100%,而预测 10 个正例其中有 9 个真正例,其查准率则为 90%。 所以有句话怎么说的来着?多说多错,少说少错,不说不错。当然,这里只是体现一下思想
在信息检索中,查准率也可以看成是检索出来的条目(文档、网页)有多少是准确的(准确的定义为所关心的正好被检索出来)
查全率
根据混淆矩阵,查准率 Recall 的定义为:
查全率是对于真实答案而言的,它表示预测出的真正例覆盖了多少原样本的正例。 体现了“宁可错杀千人,不可放过一个”的思想,就算是找遍全天下所有人,也要把目标找出来。 把目标名单里所有人都找到,就成功了(查全率高),而不在乎找错了多少人
在信息检索中,查全率也可以看成是所有准确的条目有多少被检索出来了:
F1
可以看出,查准率和查全率其实是矛盾的。想提高查准率就要谨慎判断每一个抓到的人是不是该杀的目标, 杀错一个就会降低查准率;而想提高查全率就要把每一个抓到的疑似目标都杀掉, 这样虽然可能会误杀很多人但是放过目标的概率会比较低。所以为了平衡查准率和查全率, 提出 度量,其是基于查准率与查全率的调和平均定义的
转换为:
在特定的应用场景中,对查准率和查全率的重视程度会有所不同。 如商品推荐系统中,为尽可能少打扰用户,更希望推荐内容是用户感兴趣的, 此时查准率比较重要;而在逃犯信息检索系统中,更希望尽可能少漏点逃犯, 此时查全率更重要。由此我们引入 度量的一般形式
其中:
- 度量了查全率(Recall)对查准率(Precision)的相对重要性
- 时为标准
- 时查全率(Recall)有更大的影响
- 时查准率(Precision)有更大的影响
举例
举个例子,某池塘有 1400 条鲤鱼,300 只虾,300 只鳖。 现在以捕鲤鱼为目的,撒一大网,逮着 700 条鲤鱼,200 只虾,100 只鳖, 那么 Precision, recall, F1 分别如下:
不妨看看如果把池子里的所有的鲤鱼、虾和鳖都一网打尽,这些指标又有何变化:
由此可见,查准率(Precision)是评估捕获的成果(被判定为关心的类别样本)中目标成果(关心的类别样本)所占的比例; 召回率(Recall)就是从关注领域(关心的类别样本)中,召回目标类别(被判定为关心的类别中关心的类别)的比例; F1 值则综合这两者指标的评估指标,用于综合反映整体领域的指标
和准确率指标优化类似,此处使用 Binary Cross Entropy 进行优化即可, 不同之处在于,在得到最终的预测概率之后,需要通过一些策略寻找最优阈值
还有的时候会对损失函数进行加权优化;例如标签为 1 的样本的权重就设置大一些等
Precision Recall Rate
- TODO
Log Loss
Log Loss 也称为逻辑回归损失或交叉熵损失。它基本上定义在概率估计上, 并测量分类模型的性能,其中输入是介于 0 和 1 之间的概率值
通过精确区分,可以更清楚地理解它。准确度是我们模型中预测的计数(预测值=实际值), 而对数损失是预测的不确定性量,基于它与实际标签的差异。借助对数损失值, 可以更准确地了解模型的性能
其中:
- 为模型对第 个样本的预测概率
因为 Logloss 是可以直接进行优化的函数,一般我们会直接基于 LogLoss 函数进行优化
混淆矩阵 以及 ROC 和 AUC
二分类问题中,很多分类器会生成一个预测概率,然后将预测概率与分类阈值(threshold)进行比较, 若大于阈值则分为正类,否则为反类。若分类阈值为 0.5,预测概率结果在 , 然后将这个值与 0.5 进行比较,若大于 0.5 判为正例,否则判为反例。
ROC
根据预测结果,可以将样本进行排序,将模型认为最可能是正例的样本(预测概率最高)排在最前面, 模型认为最不可能是正例的样本排在最后,这样一来,分类过程就可以看作某个截断点将样本一分为二, 前一部分为正例,后一部分为反例。排序本身质量的好坏基本体现了模型泛化性能的好坏, ROC 曲线就是从这个角度出发来研究学习器泛化性能的。
ROC 全称为“受试者工作特征”(Receiver Operating Characteristic),把排好顺序的样本逐个作为正例进行预测, 每次预测得到两个值:真正例率(True Positive Rate, TPR)、假正例率(False Positive Rate, FPR), 分别定义如下:
然后以 FPR 为横坐标, TPR 为纵坐标,得到当前情况的坐标点,直至最后, 然后将所有的点连线就得到了 ROC 曲线
下面详细描述一下曲线的画法:现有 20 个样本,正例 10 个,反例 10 个,正例用 表示,反例用 表示, 模型预测出每个样本为正例的概率,然后从高到低进行排序,如下:
需要从上面 20 个样本得到 22 个坐标点
- 第一个是 ,即将分类的阈值设为最大,这样所有的样例均预测为反例,TPR 和 FPR 均为 0
- 然后将分类阈值依次设为每个样例的预测值,即 为正例,其他为反例, 此时,,所以第二个坐标为
- 依次向后,得到坐标点 、、、 …
- 第 22 个坐标为 ,即所有样本均预测为正例:,
理论上来讲,无限个样本可以绘出圆滑的 ROC 曲线,而现实中通常是利用有限个样本来绘制 ROC 曲线, 生成的是有棱角的近似曲线
将之前得到坐标点的方法进行归纳:有 个正例和 个反例, 按预测为正例的概率大小排好序后,设前一个标记点坐标为 ,若当前为真正例, 则坐标为 ;若当前为假例,则坐标为
直观理解,随机猜测的 ROC 曲线应该是 直线。若 ROC 曲线在此直线上面, 即向上走得比向右走得“快”,真正例率大于假正例率,说明模型比随机猜测好, 大部分正例都排在反例的前面,预测模型较好。若有新的 ROC 曲线可以完全包括之前的 ROC 曲线, 则新模型的性能要优于原来的模型。如果两个 ROC 曲线有交叉部分, 我们就需要计算曲线下的面积大小来判断哪个模型的性能优越了
AUC
ROC 曲线下的面积被称为 AUC(Area Under ROC Curve), 它可以通过相邻两个坐标点与 轴形成的矩形或梯形的面积累加得到。 之所以存在梯形,是因为如果有几个预测概率相同的正反样例, 把哪个排前面哪个排后面都不太好,就用其形成的矩形的对角线来表示这几个正反样例的 ROC 曲线
所以可以用如下公式来计算 AUC,矩形也是一种特殊的梯形, 所以直接用梯形求和公式来计算两个坐标点与 轴形成的面积。 是梯形的高, 和 分别为梯形的上底和下底
AUC 值其实是一个概率值,当随机挑选出一个正样本和负样本对, 当前的分类算法根据计算得到的 Score 值将这个正样本排在负样本前面的概率就是 AUC 值, AUC 值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。 最理想的情况就是所有的正样本全部在负样本前面,这样就可以以其分界线作为阈值将正负样本完全分开, 这是最好的模型情况,
有一点需要特别声明,AUC 只能用来做二分类模型的性能度量,而且当正负样本不均衡时效果不理想。 生成坐标时向上走一步 ,向右走一步 , 若 与 相差比较大,比如 远大于 , 则 ROC 曲线向上走得要比向右走得快,更有可能被判断为性能好的模型, 但其实只是因为正负样本不均衡造成的
AUC 的数值都不会大于 1。又由于 ROC 曲线一般都处于 这条直线的上方, 所以 AUC 的取值范围在 0.5 和 1 之间。AUC 越接近 1.0,检测方法真实性越高。 等于 0.5 时,一般就无太多应用价值了
最为常见的还是基于 LogLoss 函数的优化
Normalized Gini Coefficient