如何为多类数据集绘制指定类别的ROC曲线并调整阈值获取TP、FP率?
多分类场景下单类别ROC曲线绘制的阈值调整方法
首先需要明确:仅靠单一固定阈值生成的多分类混淆矩阵无法生成完整ROC曲线,你需要提前拿到模型对所有样本的类别1预测概率输出,再按照如下one-vs-all规则操作,即可得到多组TP、FP组合:
- 第一步:样本标签二值化
将所有样本的标签重新映射:真实类别为1的标记为正样本,其余所有类别的样本统一标记为负样本 - 第二步:遍历阈值统计基础指标
默认分类阈值通常为0.5,你可以在0~1区间内取任意数量的阈值t,每个阈值下执行如下判断和统计:- 判定规则:样本的类别1预测概率 ≥ t时判定为「类别1」,否则判定为「非类别1」
- 每个阈值下统计4个核心值:
- TP(真阳性):真实为正样本、被判定为类别1的样本数
- FN(假阴性):真实为正样本、被判定为非类别1的样本数
- FP(假阳性):真实为负样本、被判定为类别1的样本数
- TN(真阴性):真实为负样本、被判定为非类别1的样本数
- 第三步:计算ROC坐标点
每个阈值下计算两个指标用于绘制曲线:- TPR(真阳性率)=
TP / (TP + FN) - FPR(假阳性率)=
FP / (FP + TN)
- TPR(真阳性率)=
- 第四步:生成ROC曲线
将所有阈值对应的(FPR, TPR)坐标在二维平面描点,连接所有点即可得到类别1对应的one-vs-all ROC曲线
如果你手头已经有多个不同阈值下的多分类混淆矩阵,可以直接从混淆矩阵中提取对应数值,无需重新跑样本预测:
针对每个阈值对应的多分类混淆矩阵,定位类别1对应的行和列:
TP = 混淆矩阵中「真实为1、预测为1」的单元格数值
FN = 类别1对应行所有数值的和 - TP(所有真实为1被分到其他类的样本总数)
FP = 类别1对应列所有数值的和 - TP(所有真实为其他类被分到1的样本总数)
TN = 混淆矩阵总样本数 - TP - FN - FP
内容的提问来源于stack exchange,提问作者BlueCurve
相关产品推荐
相关产品推荐

