性能度量:为了了解模型的泛化能力,需要一个指标来衡量,这就是它的意义。
主要讨论与分类有关的一些指标:
1. 混淆矩阵:
可以这么理解:s1,先看预测结果(P/N); s2,再根据实际表现对比预测结果,给出判断结果(T/F)。
TP:预测为1,预测正确,即实际为1;
FP:预测为1,预测错误,即实际为0;
TN:预测为0,预测正确,即实际为0;
FN:预测为0,预测错误,即实际为1.
2. 准确率
指预测正确的结果占总样本的百分比。
准确率=(TP+TN)/(TP+TN+FP+FN)
在样本不平衡的情况下,高准确率就是失效。正因为如此,衍生出了其他两种指标:精准率和召回率。
3. 精准率(precision)
又叫查准率,是针对预测结果而言的,它的含义是在所有被预测为正的样本中实际样本为正样本的概率,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确。
精准率=TP/(TP+FP)
精准率代表对正样本结果中的预测准确度;而准确率则代表整体预测的准确程度,既包括正样本,也包括负样本。
4. 召回率(Recall)
又称查全率,是针对原样本而言的,它的含义是在实际为正的样本中被预测为正样本的概率。
召回率=TP/(TP+FN)
召回率越高,代表坏样本被预测出来的概率越高,含义可以理解为:宁可错杀一千,不可放过一个。
5. 精准率和召回率的关系,F1分数
F1分数同时考虑了查准率和查全率,让二者同时达到最高,取一个平衡。
F1=2*查准率*查全率/(查准率+查全率)
6. ROC/AUC概念
灵敏度、特异度、真正率、假正率
在正式介绍ROC/AUC之前,还要再介绍两个指标,这两个指标的选择也正是ROC和AUC可以无视样本不平衡的原因。分别是:灵敏度和(1-特异度),也叫做真正率(TPR)和假正率(FPR)。
灵敏度(Sensitivity)= TP/(TP+FN)
特异度(Specificity)= TN/(FP+TN)
其实我们可以发现,灵敏度和召回率是一模一样的,只是换了名字而已。
由于我们比较关心正样本,所以需要查看有多少负样本被错误的预测为正样本,所以使用(1-特异度),而不是特异度。
真正率(TPR)= 灵敏度 = TP/(TP+FN)
假正率(FPR)= 1-特异度 = FP/(FP+TN)
下面是真正率和假正率的示意,我们发现TPR和FPR分别是基于实际表现1和0出发的,也就是说它们分别在实际的正样本和负样本中来观察相关概率问题。正因为如此,所以无论样本是否平衡,都不会被影响。拿例子来说明,总样本中,90%是正样本,10%是负样本。我们知道用准确率是有水分的,但是用TPR和FPR就不一样。这里,TPR只关注90%正样本中有多少是被真正覆盖的额,而与那10%毫无关系。同理,FPR只关注负样本中有多少是被错误覆盖的,也与那90%毫无关系,所以可以看出:如果我们从实际表现的各个角度出发,就可以避免样本不平衡的问题了,这也是为什么选用TPR和FPR作为ROC/AUC指标的原因。
7. ROC(接受者操作特征曲线)
ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。该曲线最早应用于雷达信号检测领域,用于区分信号与噪声。后来人们将其用于评价模型的预测能力,ROC曲线是基于混淆矩阵得出的。
ROC曲线中的主要两个指标就是真正率和假正率,其中横坐标为假正率(FPR),纵坐标为真正率(TPR),下面就是一个标准的ROC曲线图。
ROC曲线的阈值问题
改变阈值只是不断地改变预测的正负样本数,即TPR和FPR,但是曲线本身是不会变的。回归到我们的目的:FPR表示模型虚报的响应程度,而TPR表示模型预测响应的覆盖程度。我们所希望的是:虚报的越少越好,覆盖的越多越好,所以总结一下就是TPR越高,同时FPR越低(即ROC曲线越陡),那么模型的性能越好。
8. AUC(曲线下面积)
为了计算ROC曲线上的点,我们可以使用不同的分类阈值多次评估逻辑回归模型,但是这样做效率非常低。幸运的是,有一种基于排序的高效算法可以为我们提供此类信息,这种算法成为曲线下面积(Area Under Curve)。
比较有意思的是,如果我们连接对角线,它的面积正好是0.5。对角线的含义是:随机判断响应与不响应,正负样本覆盖率都应该是50%,表示随机结果。ROC曲线越陡越好,所以理想值就是1,一个正方形,而最差的随机判断是0.5,所以一般AUC的值介于0.5到1之间。
AUC的一般判断标准
0.5-0.7 : 效果较低,但用于预测股票已经很不错了
0.7-0.85 : 效果一般
0.85-0.95 : 效果很好
0.95-1 : 效果非常好,但一般不太可能
AUC的物理意义
曲线下面积对所有可能的分类阈值的效果进行综合衡量。曲线下面积的一种解读方式是:看作模型将某个随机正类别样本排列在某个随机负类别样本之上的概率。以下面的样本为例,逻辑回归预测从左到右以升序排列:
ROC/AUC的python实现
Python中我们可以调用sklearn机器学习库的metrics进行ROC和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.35,0.8])
fpr,tpr,thresholds = metrics.roc_curve(y,scores,pos_label=2)
metrics.auc(fpr,tpr)
输出结果为:0.75 #auc的面积为0.75