机器学习中的评价标准们
基础
对于数据测试结果 | 有4种情况: |
---|---|
真阳性(TP) | 预测为正,实际也为正 |
假阳性(FP) | 预测为正,实际为负 |
假阴性(FN) | 预测为负,实际为正 |
真阴性(TN) | 预测为负,实际也为负 |
可参考:
详解准确率、精确率、召回率、F1值等评价指标的含义
sklearn.metrics: Metrics
准确率
预测正确的结果占总样本的百分比
最简单、最直观的评价标准:准确率(Accuracy) ,即预测正确的结果占总样本的百分比,计算公式:
虽然准确率能够判断总的正确率,但是在样本不均衡的情况下,并不能作为很好的指标来衡量结果。比如有9个正样本,1个负样本,预测均为正样本时,准确率达到0.9比较高,但是并不代表系统的性能好。
精确率
在被所有预测为正的样本中实际为正样本的概率
sklearn.metrics.precision_score
精确率(Precision) 是针对预测结果而言的,其含义是在被所有预测为正的样本中实际为正样本的概率(精确率代表对正样本结果中的预测准确程度,准确率则代表整体的预测准确程度),计算公式:
召回率
实际为正的样本中被预测为正样本的概率
召回率(Recall) 是针对原样本而言的,其含义是在实际为正的样本中被预测为正样本的概率,计算公式:
混淆矩阵
Confusion Matrix,是一个误差矩阵, 常用来可视化地评估监督学习算法的性能. 大小为 (n_classes, n_classes) 的方阵, 其中 n_classes 表示类的数量. 这个矩阵的每一行表示真实类中的实例, 而每一列表示预测类中的实例 (Tensorflow 和 scikit-learn 采用的实现方式)。
sklearn.metrics.confusion_matrix
Confusion matrix whose i-th row and j-th column entry indicates the number of samples with true label being i-th class and predicted label being j-th class.
AUC指标
全称是Area under the Curve of ROC,也就是ROC曲线下方的面积。
细节参考:AUC指标深度理解
在机器学习领域, AUC 值经常用来评价一个二分类模型的训练效果。
维基百科上的定义:在信号检测理论中,接收者操作特征曲线(receiver operating characteristic curve,或者叫ROC曲线)是一种坐标图式的分析工具,用于 (1) 选择最佳的信号侦测模型、舍弃次佳的模型。 (2) 在同一模型中设定最佳阈值。这个概念最早是由二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具。
一般来讲,精确率、召回率等指标,都需要设定一个阈值去判别是属于正类还是负类,例如预测分大于等于0.5判别为正类,小于0.5判别为负类。如何设定这个阈值,是个问题。而AUC这个指标则不需要设阈值。(或者说,每种阈值的情况都考虑了)
F1_score
F分数被广泛应用在信息检索领域,用来衡量检索分类和文档分类的性能。近期在深度学习的应用中,多用作分类系统的性能指标。
F1分数(F1 Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的精确率和召回率(一般希望精确率和召回率都很高,但实际上是矛盾的,上述两个指标是矛盾体,无法做到双高)。F1分数可以看作是模型精确率和召回率的一种调和平均,最大值是1,最小值是0,又称作平衡F分数(Balanced Score)。计算公式为:
macro-F1
F1是针对二元分类的,那对于多元分类器,也有类似F1 score的度量方法,常用的有两种,一种叫做macro-F1(宏平均),另一种叫做micro-F1(微平均)。
简而言之,就是针对每个“类”(class),计算每个类的F1分数,然后联合起来。
宏平均F1计算方式:计算出每一个类的Precison和Recall后计算F1,最后将F1平均。
micro-F1
微平均F1分数,不需要区分类别,使用总体样本,计算出所有类别总的Precision和Recall,然后计算F1。
参考micro和macro F1 score分别是什么意思?:如果这个数据集中各个类的分布不平衡的话,更建议使用mirco-F1,因为macro没有考虑到各个类别的样本大小。
python
sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)
参考源码,对于'average'参数,如果是二分类问题则选择参数‘binary’;如果考虑类别的不平衡性,需要计算类别的加权平均,则使用‘weighted’;如果不考虑类别的不平衡性,计算宏平均,则使用‘macro’。具体参考代码:
from sklearn.metrics import f1_score
# micro
f1_score(y_true, y_pred, average='micro')
# macro
f1_score(y_true, y_pred, average='macro')
# weighted
f1_score(y_true, y_pred, average='weighted')
拓展
根据对recall和precision的重视程度不同,有\({F_\beta}\)分数,其物理意义就是将精准率和召回率这两个分值合并为一个分值,在合并的过程中,召回率的权重是精准率的\(\beta\)倍。计算公式为:
G分数是另一种统一精准率和召回率的系统性能评估标准。相比于F分数是准确率和召回率的调和平均数,G分数被定义为准确率和召回率的几何平均数,计算方式:
参考
- Kubat M, Holte R C, Matwin S. Machine learning for the detection of oil spills in satellite radar images[J]. Machine learning, 1998, 30(2): 195-215.