Chapter5 .7 ROC Curves

本文详细介绍了机器学习中常用的评估指标,包括阳性、阴性、真阳性、真阴性等概念,以及真阳性率、伪阳性率、准确度等关键指标的计算方法,并解释了这些指标在实际应用中的意义。


more ...

http://blog.youkuaiyun.com/pkueecser/article/details/8229166

阳性 (P, positive) 阴性 (N, Negative) 真阳性 (TP, true positive)
正确的肯定。又称:命中 (hit)
真阴性 (TN, true negative)
正确的否定。又称:正确拒绝 (correct rejection)
伪阳性 (FP, false positive)
错误的肯定,又称:假警报 (false alarm), 第一型错误
伪阴性 (FN, false negative)
错误的否定,又称:未命中 (miss), 第二型错误
真阳性率 (TPR, true positive rate)
又称:命中率 (hit rate)
TPR = TP / P = TP / (TP+FN)
伪阳性率(FPR, false positive rate)
又称:错误命中率,假警报率 (false alarm rate)
FPR = FP / N = FP / (FP + TN)
准确度 (ACC, accuracy)
ACC = (TP + TN) / (P + N)
即:(真阳性+真阴性) / 总样本数
真阴性率 (TNR)
又称:特异度 (SPC, specificity)
SPC = TN / N = TN / (FP + TN) = 1 - FPR
阳性预测值 (PPV)
PPV = TP / (TP + FP)
阴性预测值 (NPV)
NPV = TN / (TN + FN)
假发现率 (FDR)
FDR = FP / (FP + TP)
Matthews相关系数 (MCC),即  Phi相关系数
MCC = (TP*TN - FP*FN) / \sqrt{P N P' N'}
F1评分
F1 = 2TP/(P+P')
Source: Fawcett (2006).

### 绘制和解释ROC曲线 在机器学习模型评估中,接收者操作特征(Receiver Operating Characteristic, ROC)曲线是一种常用的工具来展示分类器的性能。对于给定的数据集,在不同阈值下计算真正率(True Positive Rate, TPR) 和假正率(False Positive Rate, FPR),并将其绘制成图。 #### 计算TPR和FPR 为了构建ROC曲线,需要遍历所有可能的概率阈值,并针对每一个阈值分别统计真阳性和假阳性数量。具体来说: - **真正率 (TPR)** 或召回率定义为 `TP / (TP + FN)` ,其中 TP 表示实际为正类且被正确预测的数量;FN 是指实际上属于正类却被错误地标记成负类的情况。 - **假正率 (FPR)** 定义为 `FP / (FP + TN)` 。这里 FP 指的是原本不属于目标类别却误判为该类别的实例数目;TN 则表示那些既不是目标也不被认为是目标的对象数目的总和。 通过改变决策函数中的置信度得分临界值可以得到一系列不同的(TPR,FPR)坐标点,这些点构成了最终看到的ROC曲线[^1]。 #### 使用Python绘制ROC曲线 下面是一个简单的例子说明如何利用Scikit-Learn库创建一个逻辑回归模型并对测试样本进行评分后画出相应的ROC曲线: ```python from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.datasets import make_classification # 创建模拟数据集 X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, weights=[0.9, 0.1], random_state=42) # 将数据分为训练集和验证集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=.5, stratify=y, random_state=42) clf = LogisticRegression().fit(X_train, y_train) probas_pred = clf.predict_proba(X_test) fpr, tpr, thresholds = roc_curve(y_test, probas_pred[:, 1]) roc_auc = auc(fpr, tpr) plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', lw=lw, label=f'ROC curve (area = {roc_auc:.2f})') plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic example') plt.legend(loc="lower right") plt.show() ``` 这段代码首先生成了一个不平衡的人工二元分类问题作为输入数据,接着拟合了一次逻辑回归分析过程,最后基于此模型产生的概率分数制作了ROC图形及其曲线下面积(AUC)[^2]。 #### 解读ROC曲线的意义 当面对高度偏斜的数据分布时,即某一类远多于另一类的情形下,仅依赖准确性的评价方式会显得不足甚至误导性很强。此时,查看ROC曲线可以帮助更全面地理解模型的表现特性。特别是如果关注的重点在于识别少数群体成员,则应更加重视高特异性区域内的表现情况——即使这意味着牺牲一些敏感度以换取更好的整体平衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值