【科研入门】评价指标AUC原理及实践

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
简介: 该文介绍了二分类问题的评估指标,特别是AUC的概念和重要性。文章首先讲解了混淆矩阵,包括TP、FP、FN和TN的含义,然后讨论了准确率、精确率和召回率,并指出它们在处理不平衡数据集时的局限性。接着,作者解释了阈值对分类结果的影响以及如何通过调整阈值平衡精确率和召回率。最后,文章重点介绍了ROC曲线和AUC,说明AUC作为衡量模型性能的无参数指标,其值越接近1表示模型性能越好。AUC可以通过计算ROC曲线下的面积或比较样本对的预测得分来求得。

image.png
image.png

评价指标AUC原理及实践

一、二分类评估指标

1.1 混淆矩阵

对于二分类问题,真实的样本标签有两类,我们学习器预测的类别有两类,根据二者的类别组合可以划分为四组,如下表所示:

image.png

上表即为混淆矩阵,其中,行表示预测的label值,列表示真实label值。TP,FP,FN,TN分别表示如下意思:

  • 真正类(True Positives, TP):这是模型正确预测为正类的样本数量。换句话说,这些样本在实际上也是正类,模型也预测为正类。
  • 假正类(False Positives, FP):这是模型错误地预测为正类的样本数量,而这些样本在实际上是负类。有时也称为“假警报”。
  • 假负类(False Negatives, FN):这是模型错误地预测为负类的样本数量,而这些样本在实际上是正类。有时也称为“漏报”。
  • 真负类(True Negatives, TN):这是模型正确预测为负类的样本数量。换句话说,这些样本在实际上也是负类,模型也预测为负类。

由此可得,TP和TN是我们预测准确的样本,而FP和FN是我们预测错误的样本。

1.2 准确率 Accuracy
定义

准确率表示的是预测正确的样本数占样本总数的比例。

公式

用混淆矩阵计算的话,准确率可以表示为:

$Accuracy=\frac{TP+TN}{TP+FP+TN+FN}$

局限性

对于二分类问题,样本是极其不平衡的。对于大数据集来说,标签为1的正样本数据往往不足10%,那么如果分类器将所有样本判别为负样本,那么仍可以达到90%以上的分类准确率,但这个分类器的性能显然是非常差的。

1.3 精确率 Precision 和 召回率 Recall
定义

精确率表示预测结果中,预测为正样本的样本中,正确预测为正样本的概率

召回率表示原始样本中,本就为正样本的样本中,正确预测为正样本的概率。

公式

二者用混淆矩阵表示如下:

$Precision=\frac{TP}{TP+FP}$

$Recall=\frac{TP}{TP+FN}$

1.4 阈值
定义

预测一个样本的正负是通过模型给出的概率值设定的阈值进行比较后得出的,如果模型给出的概率值大于阈值,该样本被预测为正例;如果小于阈值,则被额预测为负例

我们会将所有的结果按照概率值进行降序排序,这个阈值可以将排序结果截断为两部分。

阈值的调整

如果提高阈值,模型会变得很保守,即只有它非常确定一个样本是正例时才会预测为正例,这样能减少假正例(FP)的数量,从而提高精确率

如果降低阈值,模型更倾向于将样本预测为正例,这样就能减少漏检假负例(FN)的数量,从而提高召回率

1.5 ROC与AUC
引入

学习到这里,我们会抛出两个问题:

  • 设定阈值后再来计算精确率和召回率太麻烦了,阈值应该被设定为多少?有没有不用设定阈值就可以直接评价模型性能的方法呢?
  • 我们是根据概率值降序排序的结果来划分预测的正负例的,我们要怎样做才能让正例经过模型预测后的概率值都比负例高呢从而来提高模型的性能呢?

没错,ROC与AUC就可以解决以上的两个问题。

定义

ROC

  1. 首先,将模型对每个样本预测出来的属于正类的概率值进行降序排序,同时将概率值和标签组合成一个表格。
  2. 接着,从排序中最高的概率值开始,逐个将每个样本的概率值视作阈值。对于每个这样的阈值,计算出所有高于或等于此阈值的样本被视为正例,而低于此阈值的样本被视为负例。
  3. 对于每个阈值,都需要计算两个关键指标:TPR和FPR
  • $TPR=\frac{TP}{TP+FN}$ 作纵轴 横轴长度即为正样本数
  • $FPR=\frac{FP}{TN+FP}$​ 作横轴 纵轴长度即为负样本数

image.png

AUC

AUC即为ROC曲线下的面积。

AUC值越接近1,表明模型的性能越好;值越接近0.5(或更低),则表明模型的性能接近(或不如)随机猜测。

公式理解

为什么要选用这两个公式作为ROC曲线的横纵坐标?

$TPR=\frac{TP}{TP+FN}$

$FPR=\frac{FP}{TN+FP}$

TPR的分母TP+FN是全部的真实正例数,FPR的分母TN+FP是全部的真实负例数,分母并不会变化。

假设正例的总数为m,负例的总数是n,对按照概率值倒序排序的概率列从上到下设定阈值,每遇到一个真实正例,TPR就增加 $\frac{1}{m}$,每遇到一个真实负例,那么FPR就增加 $\frac{1}{n}$​。

AUC算法

AUC可以通过计算ROC积分来得到,但是积分过于麻烦。

因此,我们通过对所有可能的正负样本对,统计其中模型预测得分正确地将正样本得分高于负样本的比例

import numpy as np
from sklearn import metrics

##给定的真实y 和 预测pred
y = np.array([1,0,0,0,1,0,1,0,0,1])
pred = np.array([0.9, 0.4, 0.3, 0.1, 0.35, 0.6, 0.65, 0.32, 0.8, 0.7])

numerator = 0    #分子
denominator = 0  #分母

for i in range(0, len(y)-1):
    for j in range(i, len(y)):
        if y[i] != y[j]:
            denominator += 1
            #统计所有正负样本对中,模型把相对位置排序正确的数量
            if(y[i]>y[j] and pred[i]>pred[j]) or (y[i]<y[j] and pred[i]<pred[j]):
                numerator += 1

print("AUC =" , numerator/denominator)

或者可以用库中的sklearn.metrics.auc(fpr,tpr)方法

from sklearn import metrics

fpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=1)# 真实的标签为y,模型对样本的预测概率为pred,正类的标签是1,fpr是假正率,tpr是真正率,thresholds是阈值
print(metrics.auc(fpr, tpr))# metrics.auc(fpr,tpr)通过对提供的 fpr 和 tpr 数据点进行数值积分(通常使用梯形法则),计算出ROC曲线下的面积。
实的标签为y,模型对样本的预测概率为pred,正类的标签是1,fpr是假正率,tpr是真正率,thresholds是阈值
print(metrics.auc(fpr, tpr))# metrics.auc(fpr,tpr)通过对提供的 fpr 和 tpr 数据点进行数值积分(通常使用梯形法则),计算出ROC曲线下的面积。

image.png

目录
相关文章
|
6月前
|
机器学习/深度学习 算法 Python
CatBoost中级教程:集成学习与模型融合
CatBoost中级教程:集成学习与模型融合【2月更文挑战第13天】
170 3
|
11月前
|
机器学习/深度学习 算法 数据可视化
深度解读DBSCAN聚类算法:技术与实战全解析
深度解读DBSCAN聚类算法:技术与实战全解析
1758 0
|
机器学习/深度学习 数据挖掘
R实战|从文献入手谈谈logistic回归、Cox回归以及Lasso分析(一)
R实战|从文献入手谈谈logistic回归、Cox回归以及Lasso分析(一)
710 0
|
1月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
1月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【白话机器学习】算法理论+实战之决策树
【白话机器学习】算法理论+实战之决策树
|
5月前
|
机器学习/深度学习 算法
技术经验解读:【机器学习】代价函数(costfunction)
技术经验解读:【机器学习】代价函数(costfunction)
|
5月前
|
算法 计算机视觉 Python
技术经验分享:GBM模型调参详解
技术经验分享:GBM模型调参详解
|
6月前
|
数据挖掘
【数据挖掘】Lasso回归原理讲解及实战应用(超详细 附源码)
【数据挖掘】Lasso回归原理讲解及实战应用(超详细 附源码)
805 0
|
机器学习/深度学习 自然语言处理 PyTorch
机器学习-ROC曲线:技术解析与实战应用
机器学习-ROC曲线:技术解析与实战应用
345 0