其中,TP(真正,True Positive)表示真正结果为正例,预测结果也是正例;FP(假正,False Positive)表示真实结果为负例,预测结果却是正例;TN(真负,True Negative)表示真实结果为正例,预测结果却是负例;FN(假负,False Negative)表示真实结果为负例,预测结果也是负例。显然,TP+FP+FN+TN=样本总数。
精确率和准确率是比较容易混淆的两个评估指标,两者是有区别的。精确率是一个二分类指标,而准确率能应用于多分类,其计算公式为:
机器学习模型中,很多模型输出是预测概率。而使用精确率、召回率这类指标进行模型评估时,还需要对预测概率设分类阈值,比如预测概率大于阈值为正例,反之为负例。这使得模型多了一个超参数,并且这个超参数会影响模型的泛化能力。
当我们调整阈值时,就会造成不同的精准率和召回率,阈值越高,精准率越高,召回率越低。阈值越低则相反。
接收者操作特征(Receiver Operating Characteristic,ROC)曲线不需要设定这样的阈值。ROC曲线纵坐标是真正率,横坐标是假正率,其对应的计算公式为:
先看图中的四个点和对角线:
因此,ROC 曲线越接近左上角,分类器的性能越好。
如上,是三条ROC曲线,在0.23处取一条直线。那么,在同样的FPR=0.23的情况下,红色分类器得到更高的TPR。也就表明,ROC越往上,分类器效果越好。
sklearn中roc计算代码示例:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html
AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。AUC是一个数值,当仅仅看 ROC 曲线分辨不出哪个分类器的效果更好时,用这个数值来判断。
AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。
The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.
从上面定义可知,意思是随机挑选一个正样本和一个负样本,当前分类算法得到的 Score 将这个正样本排在负样本前面的概率就是 AUC 值。AUC 值是一个概率值,AUC 值越大,分类算法越好。
sklearn中aou计算代码示例:
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html
PRC (precision recall curve) 一般指 PRC 曲线,PRC 曲线的纵坐标为 precision,横坐标为 recall。它的生成方式与 ROC 曲线类似,也是取不同的阈值(threshold)来生成不同的坐标点,最后连接起来生成。
来看下一个特殊的点(1, 1),即 recall=1,precision=1,这意味着 FN=0,FP=0,此时分类器模型的效果非常完美。由此可以知道,越靠近右上角,说明模型效果越好。
由于 recall 与 TPR 是一个意思,所以 PRC 曲线的横坐标与 ROC 曲线的纵坐标一样。
F1分数可以看作是模型精准率和召回率的一种加权平均,它的最大值是1,最小值是0。
其变形来源于:
我们使用调和平均而不是简单的算术平均的原因是:调和平均可以惩罚极端情况。一个具有 1.0 的精度,而召回率为 0 的分类器,这两个指标的算术平均是 0.5,但是 F1 score 会是 0。F1 score 给了精度和召回率相同的权重,它是通用 Fβ指标的一个特殊情况,在 Fβ中,β 可以用来给召回率和精度更多或者更少的权重。
Fβ的计算公式:
F1分数认为召回率和精确率同等重要,F2分数认为召回率的重要程度是精确率的2倍,而F0.5分数认为召回率的重要程度是精确率的一半。
另外:G分数是另一种统一精确率和的召回率系统性能评估标准,G分数被定义为召回率和精确率的几何平均数。
多分类问题的F1-Score是采用先计算每个分类的f1-score,然后求各个分类的均值。
(1)计算各分类的f1-score
predictions = pval < epsilon
tp = sum((predictions == 1) & (y == 1))
fp = sum((predictions == 1) & (y == 0))
fn = sum((predictions == 0) & (y == 1))
precision = tp / (tp + fp)
recall = tp / (tp + fn)
F1 = 2 * precision * recall / (precision + recall)
sklearn中f1-score计算代码示例:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html
为什么要出现这么多评估指标呢?实际上,不同的分类任务适合使用不同的指标来衡量。
例如,推荐系统中,如果希望更精准的了解客户需求,避免推送用户不感兴趣的内容,precision 就更加重要;在疾病检测的时候,我们不希望查漏任何一项疾病,这时 recall(TPR) 就更重要。当两者都需要考虑时,F1-score 就是一种参考指标。
真实世界中的数据经常会面临 class imbalance 问题,即正负样本比例失衡,而且测试数据中的正负样本的分布也可能随着时间变化。根据计算公式可以推知,在测试数据出现imbalance 时 ROC 曲线能基本保持不变,而 PRC 则会出现大变化。
参考:
《美团机器学习学习实践》
ROC曲线与AUC值:http://www.cnblogs.com/gatherstars/p/6084696.html
什么是 ROC AUC:https://www.jianshu.com/p/42bfe1a79d12
Wiki F1-score:https://en.wikipedia.org/wiki/F1_score
详解sklearn的多分类模型评价指标:https://zhuanlan.zhihu.com/p/59862986
一文读懂二元分类模型评估指标:https://cloud.tencent.com/developer/article/1099537