机器学习--ROC & AUC

参考

机器学习-ROC曲线 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/347470776一文看懂ROC、AUC - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/81202617

在了解之前,我们先来认识一下以下的概念

针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况:

(1)TP(True Postive):是正类并且被预测为正类

(2)FN(False Negative):是正类,但是被预测成为负类

(3)FP(False Postive):是负类,但是被预测成为正类

(4)TN(True Negative):是负类,但是被预测成为负类

1.ROC曲线的定义

ROC的全称是Receiver Operating Characteristic Curve,中文名字叫"受试者工作特征曲线",顾名思义,其主要的分析方法就是画这条特征曲线。

它显示了在不同阈值下真正例率(True Positive Rate,也称为召回率)与假正例率(False Positive Rate)之间的关系。

横轴:假正类率 (false postive rate, FPR),特异度,划分实例中所有负例占所有负例的比例;TNR=1-FPR。

纵轴:真正类率 ==Recall(true postive rate, TPR),灵敏度,Sensitivity(正类覆盖率)

ROC 曲线中横轴和纵轴的含义以及与阈值的关系。

阈值

举一个雷达兵的例子。每一个雷达兵用的都是同一台雷达返回的结果,但是每一个雷达兵内心对其属于敌军轰炸机的判断是不一样的,可能1号兵解析后认为结果大于0.9,就是轰炸机,2号兵解析后认为结果大于0.85,就是轰炸机,依次类推,每一个雷达兵内心都有自己的一个判断标准(也即对应分类器的不同"阈值"),这样针对每一个雷达兵,都能计算出一个ROC曲线上的关键点(一组FPR,TPR值),把大家的点连起来,也就是最早的ROC曲线了。

当改变分类器的阈值时,会影响到对正例和负例的界定,从而影响到分类器的性能。

一般来说,降低阈值会增加真正例率(TPR),但也会导致增加假正例率(FPR)。ROC 曲线展示了在不同阈值下这种权衡关系。

具体来说,当阈值设定得很低时,分类器可能会将大部分样本判定为正例,这会提高真正例率(TPR),但也会导致增加假正例率(FPR)。

相反,当阈值设定得很高时,分类器可能只将少数样本判定为正例,这会降低真正例率(TPR),但也会导致减少假正例率(FPR)。

ROC 曲线展示了在所有可能阈值下 TPR 和 FPR 的变化情况,帮助我们理解分类器在不同判定标准下的性能表现。

ROC曲线绘制了在不同阈值下的TPR和FPR之间的折衷关系。曲线越靠近左上角(0,1)处,分类器性能越好,因为在这个点处TPR最大,而FPR最小。

AUC(Area Under the Curve):是ROC曲线下的面积,用来衡量分类器性能的一个数值。AUC值的范围在0到1之间,完美分类器的AUC值为1,随机猜测的分类器的AUC值为0.5。

2. 代码演示

python 复制代码
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, roc_auc_score
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt

# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# 将数据集分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 构建分类模型(这里以逻辑回归为例)
model = LogisticRegression()
model.fit(X_train, y_train)

# 获取预测概率
y_pred_proba = model.predict_proba(X_test)[:, 1]

# 计算 ROC 曲线的各项指标
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
auc = roc_auc_score(y_test, y_pred_proba)

# 绘制 ROC 曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, label=f'ROC curve (AUC = {auc:.2f})', color='orange')
plt.stackplot(fpr, tpr, color='skyblue', alpha=0.3)  # 添加阴影效果
plt.text(0.6, 0.4, f'AUC = {auc:.3f}', fontdict=dict(size=12))  # 添加文本标签
plt.plot([0, 1], [0, 1], 'k--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc='lower right')
plt.show()

print(f"AUC值为: {auc:.4f}")

结果展示

3. 一些其他地模型评估参数

a. 准确率(Accuracy)

所有预测正确的和所有test集的比例

b. 精确率(Precision)

也称为查准率,表示分类器预测为正类别的样本中有多少确实属于正类别的比例。

计算公式为:Precision = TP / (TP + FP)

c.召回率(Recall**)**

也称为查全率或灵敏度,表示实际为正类别的样本中被分类器预测为正类别的比例。

计算公式为:Recall = TP / (TP + FN)

d.F1分数(F1-score)

是精确率和召回率的调和平均值,综合考虑了两者的性能。

F1-score的取值范围在0到1之间,是精确率和召回率的平衡指标。

计算公式为:F1-score = 2 * (Precision * Recall) / (Precision + Recall)。

相关推荐
uesowys4 分钟前
腾讯云使用OpenClaw搭建企业微信AI助手
人工智能·企业微信·腾讯云·openclaw
irpywp6 分钟前
OpenShell:安全沙箱隔离的沙箱隔离技术
人工智能·安全
勾股导航4 小时前
大模型Skill
人工智能·python·机器学习
卷福同学6 小时前
【养虾日记】Openclaw操作浏览器自动化发文
人工智能·后端·算法
春日见6 小时前
如何入门端到端自动驾驶?
linux·人工智能·算法·机器学习·自动驾驶
光锥智能6 小时前
从自动驾驶到 AI 能力体系,元戎启行 GTC 发布基座模型新进展
人工智能
luoganttcc6 小时前
自动驾驶 世界模型 有哪些
人工智能·机器学习·自动驾驶
潘高6 小时前
10分钟教你手撸一个小龙虾(OpenClaw)
人工智能
禁默6 小时前
光学与机器视觉:解锁“机器之眼”的核心密码-《第五届光学与机器视觉国际学术会议(ICOMV 2026)》
人工智能·计算机视觉·光学
2401_876907526 小时前
Python机器学习实践指南
开发语言·python·机器学习