将排名作为阈值做ROC曲线

排名作为阈值绘制ROC曲线

有时我们的结果需要按照最终标签排名作出ROC曲线,如下代码那么我们只需要预测得分和真实标签值。

a.将真实标签按照得分排序
b.排序后的标签按照排名作为阈值,依次从1到最后,每个阈值得到一次FPR和TPR.

大家可以比较一下我写的对不对,如有问题欢迎指出. 代码片.

import matplotlib.pyplot as plt


class Rankauc:
    def __init__(self, score_list, label_list):
        self.score_list = score_list
        self.label_list = label_list
        self.len = len(label_list)
        self.F_num = label_list.count(0)
        self.T_num = label_list.count(1)

    def binding_sort(self):
        """
        根据得分大小,将标签排序
        :return: 标签排名顺序
        """
        zipped = zip(self.score_list, self.label_list)
        sort_zipped = sorted(zipped, key=lambda x: x[0], reverse=True)  # 按照 x[0] 排序
        result = zip(*sort_zipped)
        score, label_rank = [list(x) for x in result]
        return label_rank

    def r_auc(self):
        TPR = []
        FPR = []
        for i in range(self.len):
            tp = (self.binding_sort()[:i+1]).count(1)
            TPR.append(tp / self.T_num)  # 真阳性率
            fp = (self.binding_sort()[:i+1]).count(0)
            FPR.append(fp / self.F_num)  # 加阳性率
        plt.plot(FPR, TPR)
        plt.show()
        return TPR, FPR

if __name__ == '__main__':
    A = [0.3, 0.5, 0.9, 0.8, 0.4, 0.6, 0.8, 0.6, 0.7, 0.8, 0.9, 0.75, 0.85]
    B = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]

    m = Rankauc(A, B)
    print(m.binding_sort())
    print(m.r_auc())
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值