https://blog.csdn.net/Monk_donot_know/article/details/86614558
模型评估主要分为离线评估和在线评估两个阶段。 针对分类、 排序、 回归、序列预测等不同类型的机器学习问题, 评估指标的选择也有所不同。
回归模型的评估指标就是其损失函数,如绝对误差AE系列,平方误差SE系列,Huber等。
分类(Classification)算法指标
TP=True Positive
TN=True Negative
FP=False Positive
FN=False Negative
Accuracy=精度=
即所有分类正确的样本占全部样本的比例
当正负样本不均衡的时候,不适合用Accuracy!比如样本中负样本数量远远多于正样本,此时如果负样本能够全部正确分类,即使正样本全部预测错误,那么Accuracy依然很高,但是正样本没有取得良好的分类效果。所以当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。样本不均衡时候,可以使用平均准确率(每个类别下的样本准确率的算术平均) ,也可以采用F-score、G-mean、AUC。
Precision=查准率=精确率=
分类正确的正样本个数占分类器判定为正样本的样本个数的比例,即预测是正例的结果中,确实是正例的比例。
Recall=召回率=查全率=
分类正确的正样本个数占真正的正样本个数的比例,即所有实际的正例样本中,被预测是正例的比例
PRC=P-R曲线
P-R曲线的横轴是召回率, 纵轴是精确率。将样本按照按照预测为正例的概率值从大到小进行排序,从第一个开始,逐个将当前样本点的预测值设置为阈值,有了阈值之后,即可得出混淆矩阵各项的数值,然后计算出P和R,以R为横坐标,P为纵坐标,绘制于图中,即可得出P-R曲线,示意图如下。
例如,有100个样本,正负样例各50个,经过Sigmoid函数后会输出一个概率值,对这100个概率值从大到小排序。我们选择第一个样本的概率值作为阈值,大于等于的样本为正例(也就是只查出概率最大的一个,既然概率最大那么真实也是正例),小于
的样本为负例,那么TP+FP=1,TP=1,FP=0,P=1,此时TP+FN=50,FN=49,TN=50,R=0.2;选择第二个样本的预测概率值作为阈值,大于等于
的样本为正例,只有2个,TP+FP=2;小于
的样本为负例,FN+TN=98...
P和R是一对矛盾的度量,通常精确率高时召回率较低,而召回率高时精确率会较低。精确率越高,代表预测为正类的比例越高,而要做到这点,通常是因为只选择了有把握的样本。最简单的做法就是只挑选最有把握的一个样本,此时FP=0,P=1,但FN必然非常大(没把握的都判定为负类),因此召回率就非常低了。召回率高需要找到所有正类。要做到这点,最简单的做法就是所有类别都判定为正类,那么FN=0,但FP也很大,所以精确率就很低了。随着我们选择的阈值越来越大,P越来越大,R越来越小。
当一个模型a的P-R曲线完全包住另一个模型b的P-R曲线时,即可认为a优于b;其他情况下,可以使用平衡点即F1值,或者曲线下的面积来评估模型的好坏。
https://blog.csdn.net/qq_27871973/article/details/81065074
F1 值
F1是精准率和召回率的调和平均值,综合考虑了P和R:
调和平均相比较于算数平均,更加重视较小值。也可以给P和R加上权重,表示如下:
当,重视P值;
更加重视准确率,就意味着“宁缺毋滥”,适用于对精度要求高的场景,如商品推荐。
而重视召回率,意味着“宁可错杀一百,不能放过一个”,适用于类似反欺诈等场景。
TPR=真正率=灵敏度(sensitivity)=查全率=
表示正例的样本被正确预测为正例的比例。
FPR=特异度(specificity)=假正率=
表示反例的样本中被错误预测为正例的比例。
灵敏度(真正率)TPR是正样本的召回率,特异度(真负率)TNR是负样本的召回率
ROC(Receiver Operating Characteristic)
ROC曲线则有很多优点, 经常作为评估二分类器最重要的指标之一。举一个医院诊断病人的例子。 假设有10位疑似癌症患者, 其中有3位很不幸确实患了癌症(P=3) ,另外7位不是癌症患者(N=7) 。 医院对这10位疑似患者做了诊断, 诊断出3位癌症患者, 其中有2位确实是真正的患者(TP=2) 。 那么真阳性率=TPR=TP/P=2/3。 对于7位非癌症患者来说, 有一位很不幸被误诊为癌症患者(FP=1) , 那么假阳性率FPR=FP/N=1/7。 对于“该医院”这个分类器来说, 这组分类结果就对应ROC曲线上的一个点(1/7, 2/3)。
如何绘制ROC曲线?---两种方法
-
第一种方法:等距选择阈值,如组距=0.1时:
当阈值=1时, 模型把全部样本预测为负例, 那么FP=TP=0, FPR=TPR=0, 因此曲第一个点坐标为(0,0);
当阈值=0.9时, 计算FPR和TPR,得到第2个点;
当阈值=0.8时, 计算FPR和TPR,得到第3个点;
...
依次调整截断点, 直到画出全部的关键点, 再连接关键点即得到最终的ROC曲线,如下图:
当样本点很多时曲线就会平滑些 - 第二种方法:样本排序法
- 根据样本标签统计出正样本数=TP+FN, 负样本数=FP+TN;
- 把横轴分成FP+TN份, 纵轴分成TP+FN份;
- 再根据模型输出的预测概率对样本从高到低排序 ;
- 依次遍历样本, 同时从零点开始绘制ROC曲线, 每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线, 每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线, 直到遍历完所有样本, 曲线最终停在(1,1) 这个点, 整个ROC曲线绘制完成。
与前面的P-R曲线类似,ROC曲线也是通过遍历所有阈值来绘制整条曲线的。如果我们不断的遍历所有阈值,预测的正样本和负样本是在不断变化的,相应的在ROC曲线图中也会沿着曲线滑动。
我们看到改变阈值只是不断地改变预测的正负样本数,即TPR和FPR,但是曲线本身并没有改变。这是有道理的,阈值并不会改变模型的性能。
ROC曲线下面覆盖的面积称为AUC(Area Under ROC Curve),用于评估模型的好坏。如何计算AUC?理论上计算AUC值只需要沿着ROC横轴做积分就可以了,时间我们可以通过梯形去插值计算,公式和示意图如下:
由于ROC曲线一般都处于y=x这条直线的上方(如果不是的话, 只要把模型预测的概率反转成1−p就可以得到一个更好的分类器) , 所以AUC的取值一般在0.5~1之间。 AUC越大, 说明分类器越可能把真正的正样本排在前面, 分类性能越好。
ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类别不平衡(Class Imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化,ROC以及AUC可以很好的消除样本类别不平衡对指标结果产生的影响。
那么如何判断一个模型的ROC曲线是好的呢?这个还是要回归到我们的目的:FPR表示模型对于负样本误判的程度,而TPR表示模型对正样本召回的程度。我们所希望的当然是:负样本误判的越少越好,正样本召回的越多越好。所以总结一下就是TPR越高,同时FPR越低(即ROC曲线越陡),那么模型的性能就越好。参考如下动态图进行理解。
即:进行模型的性能比较时,与PR曲线类似,若一个模型A的ROC曲线被另一个模型B的ROC曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。
ROC曲线相比P-R曲线有什么特点?
相比P-R曲线, ROC曲线有一个特点, 当正负样本的分布发生变化时, ROC曲线的形状能够基本保持不变, 而P-R曲线的形状一般会发生较剧烈的变化。
可以看出, P-R曲线发生了明显的变化, 而ROC曲线形状基本不变。 这个特点让ROC曲线能够尽量降低不同测试集带来的干扰, 更加客观地衡量模型本身的性能。 这有什么实际意义呢? 在很多实际问题中, 正负样本数量往往很不均衡。 比如, 计算广告领域经常涉及转化率模型, 正样本的数量往往是负样本数量的1/1000甚至1/10000。 若选择不同的测试集, P-R曲线的变化就会非常大, 而ROC曲线则能够更加稳定地反映模型本身的好坏。 所以, ROC曲线的适用场景更多, 被广泛用于排序、 推荐、 广告等领域。 但需要注意的是, 选择P-R曲线还是ROC曲线是因实际问题而异的, 如果研究者希望更多地看到模型在特定数据集上的表现, P-R曲线则能够更直观地反映其性能
宏平均(macro-average)和微平均(micro-average)
在多分类或二分类问题中,我们有时候会有多组混淆矩阵,例如:多次训练或者在多个数据集上训练的结果,那么估算全局性能的方法有两种,分为宏平均(macro-average)和微平均(micro-average)。
宏平均(macro-average)
宏平均就是先算出每个混淆矩阵的P值和R值,然后取得平均P值macro-P和平均R值macro-R,再算出或
微平均(micro-average)
微平均则是计算出混淆矩阵的平均TP、FP、TN、FN,接着进行计算P、R,进而求出或
。
其它分类指标同理,均可以通过宏平均/微平均计算得出。
需要注意的是,在多分类任务场景中,如果非要用一个综合考量的metric的话,宏平均会比微平均更好一些,因为宏平均受稀有类别影响更大。宏平均平等对待每一个类别,所以它的值主要受到稀有类别的影响,而微平均平等考虑数据集中的每一个样本,所以它的值受到常见类别的影响比较大。
KS曲线=Kolmogorov-Smirnov
KS值是在模型中用于区分预测正负样本分隔程度的评价指标,一般应用于金融风控领域。
在KS曲线中,则是以阈值作为横坐标,以FPR和TPR作为纵坐标,ks曲线则为ks = max(|TPR-FPR|),即ks曲线的最大值为最终ks值。
KS值越大,表示模型能够将正、负客户区分开的程度越大。 通常来讲,KS>0.2即表示模型有较好的预测准确性。
下图中,一条曲线是FPR,一条是TPR
其横坐标为阈值降序排列(从1至0),纵坐标为在不同阈值划分下的TPR与FPR的差值。KS值(Kolmogorov-Smirnov Value)则定义为KS曲线的最大值。
Kappa一致性系数
混淆矩阵虽然比较粗糙,却是描述栅格数据随时间的变化以及变化方向的很好的方法。但是交叉表却不能从统计意义上描述变化的程度,需要一种能够测度名义变量变化的统计方法即KAPPA指数——KIA。 kappa系数是一种衡量分类精度的指标。KIA主要应用于比较分析两幅地图或图像的差异性是“偶然”因素还是“必然”因素所引起的,还经常用于检查卫星影像分类对于真实地物判断的正确性程度。KIA是能够计算整体一致性和分类一致性的指数。
https://blog.csdn.net/pipisorry/article/details/52574156
G-mean
总结
对于二类分类器/分类算法,评价指标主要有accuracy, precision,recall,F-score,PR曲线,ROC-AUC曲线,gini系数。
对于多类分类器/分类算法,评价指标主要有accuracy, 宏平均和微平均,F-score
在分类任务中(包括二分类和多分类),最简单的评估指标莫过于错误率和精度了,错误率表示的是错误分类的样本个数占总样本个数的比例,精度则是1减去错误率。
但是单单看错误率和精度两个指标无法很好的对模型进行合适的评估。一方面,现在不少的模型最终都是预测一个类别的概率值,为了计算错误率和精度,得设定一个阈值,以便确定预测的正例和反例。这样相当于引入了一个新的超参数,会增加复杂性和不确定行。
另一方面,以周志华老师在《机器学习》[1]书中的西瓜为例,我们挑选西瓜往往关注的不是有多少比例的西瓜判断错了,而是关注:我挑选的瓜有多少比例是好瓜,或者有多少比例的好瓜被我挑选出来了。错误率和精度无法评估这方面的比例。