最近对这几个指标又有些生疏,整理个笔记方便查看:
分类问题 | 回归问题 |
---|---|
准确率 – Accuracy | MSE(均方误差) |
精确率(查准率)- Precision | MAE (平均绝对误差) |
召回率(查全率)- Recall | 均方根误差(RMSE) |
F1分数 | R方 (R Squared) |
ROC曲线 | —— |
AUC曲线 | —— |
混淆矩阵:
标签值:1 | 标签值:0 | |
---|---|---|
预测值:1 | T P TP TP | F P FP FP |
预测值:0 | F N FN FN | T N TN TN |
具体例子:
分类评估指标详解
下面详细介绍一下分类分为种的各种评估指标详情和计算公式:
预测正确的结果占总样本的百分比,公式如下:
准确率 = ( T P + T N ) / ( T P + T N + F P + F N ) (TP+TN)/(TP+TN+FP+FN) (TP+TN)/(TP+TN+FP+FN)
注: 虽然准确率可以判断总的正确率,但是在样本不平衡 的情况下,并不能作为很好的指标来衡量结果。举个简单的例子,比如在一个总样本中,正样本占 90%,负样本占 10%,样本是严重不平衡的。对于这种情况,我们只需要将全部样本预测为正样本即可得到 90% 的高准确率,但实际上我们并没有很用心的分类,只是随便无脑一分而已。这就说明了:由于样本不平衡的问题,导致了得到的高准确率结果含有很大的水分。即如果样本不平衡,准确率就会失效。
所有被预测为正的样本中实际为正的样本的概率,公式如下:
精准率 = T P / ( T P + F P ) TP/(TP+FP) TP/(TP+FP)
精准率和准确率看上去有些类似,但是完全不同的两个概念。精准率代表对正样本结果中的预测准确程度,而准确率则代表整体的预测准确程度,既包括正样本,也包括负样本。
实际为正的样本中被预测为正样本的概率,其公式如下:
召回率=TP/(TP+FN)
召回率的应用场景:
以网贷违约率为例,相对好用户,我们更关心坏用户,不能错放过任何一个坏用户。因为如果我们过多的将坏用户当成好用户,这样后续可能发生的违约金额会远超过好用户偿还的借贷利息金额,造成严重偿失。召回率越高,代表实际坏用户被预测出来的概率越高,它的含义类似:宁可错杀一千,绝不放过一个。
如果我们把**精确率(Precision)和召回率(Recall)**之间的关系用图来表达,就是下面的P-R曲线:
缩写 P − R P-R P−R曲线,纵轴在左边是查准率 P P P,很方便记忆。这两个指标实际上难以两全。为了综合两者的表现,在两者之间找一个平衡点,就出现了一个 F1分数。
F 1 = ( 2 × P r e c i s i o n × R e c a l l ) / ( P r e c i s i o n + R e c a l l ) F1=(2×Precision×Recall)/(Precision+Recall) F1=(2×Precision×Recall)/(Precision+Recall)
1.灵敏度/特异度介绍
在介绍 ROC/AUC 之前,要再介绍两个指标,这两个指标的选择也正是 ROC 和 AUC 可以无视样本不平衡的原因。 这两个指标分别是:灵敏度和特异度,也叫做真正率(TPR)和假正率(FPR)。
其实灵敏度和召回率是一样的,只是名字换了而已。
由于我们比较关心正样本,所以需要查看有多少负样本被错误地预测为正样本,使用1减去特异度,而非特异度。
TPR 和 FPR 分别是基于实际表现 1 和 0 出发的,也就是说它们分别在实际的正样本和负样本中来观察相关概率问题。 正因为如此,所以无论样本是否平衡,都不会被影响。还是拿之前的例子,总样本中,90% 是正样本,10% 是负样本。我们知道用准确率是有水分的,但是用 TPR 和 FPR 不一样。这里,TPR 只关注 90% 正样本中有多少是被真正覆盖的,而与那 10% 毫无关系,同理,FPR 只关注 10% 负样本中有多少是被错误覆盖的,也与那 90% 毫无关系,所以可以看出:**如果我们从实际表现的各个结果角度出发,就可以避免样本不平衡的问题了,这也是为什么选用 TPR 和 FPR 作为 ROC/AUC 的指标的原因。**结合混淆矩阵更容易理解。
也可以从另一个角度考虑:条件概率。 我们假设 X 为预测值,Y 为真实值。那么就可以将这些指标按条件概率表示:
从上面三个公式看到:如果我们先以实际结果为条件(召回率,特异度),那么就只需考虑一种样本,而先以预测值为条件(精准率),那么我们需要同时考虑正样本和负样本。所以先以实际结果为条件的指标都不受样本不平衡的影响,相反以预测结果为条件的就会受到影响。
2. ROC(接受者操作特征曲线)
ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。该曲线最早应用于雷达信号检测领域,用于区分信号与噪声。后来人们将其用于评价模型的预测能力,ROC 曲线是基于混淆矩阵得出的。
ROC 曲线中的主要两个指标就是真正率和假正率,其中横坐标为假正率(FPR),纵坐标为真正率(TPR),这两个指标也是ROC 曲线无视样本不平衡的原因,下面就是一个典型的 ROC 曲线图,在不同分类阈值下的 TP 率与 FP 率。
如何判断 ROC 曲线的好坏?
改变阈值只是不断地改变预测的正负样本数,即 TPR 和 FPR,但是曲线本身是不会变的。那么如何判断一个模型的 ROC 曲线是好的呢?这个还是要回归到我们的目的:FPR 表示模型虚报的响应程度,而 TPR 表示模型预测响应的覆盖程度。我们所希望的当然是:虚报的越少越好,覆盖的越多越好。所以总结一下就是 TPR 越高,同时 FPR 越低(即 ROC 曲线越陡),那么模型的性能就越好。
3. AUC(曲线下的面积)
为了计算 ROC 曲线上的点,我们可以使用不同的分类阈值多次评估逻辑回归模型,但这样做效率非常低。幸运的是,有一种基于排序的高效算法可以为我们提供此类信息,这种算法称为曲线下面积(Area Under Curve)。
AUC 的物理意义:
曲线下面积对所有可能的分类阈值的效果进行综合衡量。曲线下面积的一种解读方式是看作模型将某个随机正类别样本排列在某个随机负类别样本之上的概率。
比较有意思的是,如果我们连接对角线,它的面积正好是 0.5。对角线的实际含义是:随机判断响应与不响应,正负样本覆盖率应该都是 50%,表示随机效果。 ROC 曲线越陡越好,所以理想值就是 1,一个正方形,而最差的随机判断都有 0.5(使用瞎猜方式),所以一般 AUC 的值是介于 0.5 到 1 之间的。
AUC 的一般判断标准:
from sklearn import metrics
from sklearn.metrics import auc
import numpy as np
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.3, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
metrics.auc(fpr, tpr)
参考:
周志华机器学习
谷歌机器学习:机器学习