多个类均值ROC计算
Multiple classes mean ROC calculation
假设我有(为简单起见)3 class 对象检测器,我想绘制平均 ROC 曲线。我可以为每个 class 成功绘制 ROC,如下所示。
值是正确的,曲线也是如此。问题是我有(正如你在图中看到的那样)每个 class.
的样本数量不同
例如(随机数据):
Class 31
FPR :['0.00', '0.20', '0.30']
TPR :['0.00', '0.20', '0.30']
Class 39
FPR :['0.00', '0.20', '0.30', '0.40', '0.50']
TPR :['0.00', '0.20', '0.30', '0.40', '0.50']
Class 42
FPR :['0.00', '0.20', '0.30', '0.40', '0.50', '0.60', '0.70', '0.80']
TPR :['0.00', '0.20', '0.30', '0.40', '0.50', '0.60', '0.70', '0.80']
我正在使用 this script for evaluation (recall/sensitivity is already calculated as you can see on the line 647) 并且我稍微修改了它以计算 FPR(1-特异性)如下:
fpr = tp[:]
for idx, val in enumerate(tp):
fpr[idx] = float(fp[idx]) / (fp[idx] + (gt_counter_per_class[class_name] - tp[idx]))
并绘制 ROC(召回率与 1-特异性)如下
plt.plot(fpr, rec, label='ROC curve of the class {0} (AUC = {1:0.2f})'
''.format(class_name, auc(fpr, rec)))
我已经在这上面花了几个小时,但无法弄清楚如何从多条 ROC 曲线(对于每条 class)计算平均 ROC,如果有 不同的计数 每个 class 的样本数。感谢您的帮助。
我能够分别对每个 class 使用插值来解决这个问题
mean_fpr = np.linspace(0, 1, 100)
tprs.append(interp(mean_fpr, fpr, tps))
然后计算平均值
mean_tpr = np.mean(tprs, axis=0)
plt.plot(mean_fpr, mean_tpr, color='k',
label='Mean ROC (AUC = {0:0.2f})'.format(mean_auc))
结果如下所示
假设我有(为简单起见)3 class 对象检测器,我想绘制平均 ROC 曲线。我可以为每个 class 成功绘制 ROC,如下所示。
值是正确的,曲线也是如此。问题是我有(正如你在图中看到的那样)每个 class.
的样本数量不同例如(随机数据):
Class 31
FPR :['0.00', '0.20', '0.30']
TPR :['0.00', '0.20', '0.30']
Class 39
FPR :['0.00', '0.20', '0.30', '0.40', '0.50']
TPR :['0.00', '0.20', '0.30', '0.40', '0.50']
Class 42
FPR :['0.00', '0.20', '0.30', '0.40', '0.50', '0.60', '0.70', '0.80']
TPR :['0.00', '0.20', '0.30', '0.40', '0.50', '0.60', '0.70', '0.80']
我正在使用 this script for evaluation (recall/sensitivity is already calculated as you can see on the line 647) 并且我稍微修改了它以计算 FPR(1-特异性)如下:
fpr = tp[:]
for idx, val in enumerate(tp):
fpr[idx] = float(fp[idx]) / (fp[idx] + (gt_counter_per_class[class_name] - tp[idx]))
并绘制 ROC(召回率与 1-特异性)如下
plt.plot(fpr, rec, label='ROC curve of the class {0} (AUC = {1:0.2f})'
''.format(class_name, auc(fpr, rec)))
我已经在这上面花了几个小时,但无法弄清楚如何从多条 ROC 曲线(对于每条 class)计算平均 ROC,如果有 不同的计数 每个 class 的样本数。感谢您的帮助。
我能够分别对每个 class 使用插值来解决这个问题
mean_fpr = np.linspace(0, 1, 100)
tprs.append(interp(mean_fpr, fpr, tps))
然后计算平均值
mean_tpr = np.mean(tprs, axis=0)
plt.plot(mean_fpr, mean_tpr, color='k',
label='Mean ROC (AUC = {0:0.2f})'.format(mean_auc))
结果如下所示