混淆矩阵
预测 \真实 | P | N |
---|---|---|
P | TP | FP |
N | FN | TN |
查准率,表示所有被预测为正类的样本(TP+FP)是真正类(TP)的比例: P = T P T P + F P P= \frac{TP}{TP+FP} P=TP+FPTP 查全率,表示所有真正类的样本(TP+FN)中被预测为真正类(TP)的比例: R = T P T P + F N R= \frac{TP}{TP+FN} R=TP+FNTP
PR曲线的横坐标为召回率R,纵坐标为查准率P
如何利用PR曲线对比性能:
AUC就是衡量学习器优劣的一种性能指标。从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得。
真阳性率: T P R = T P T P + F N TPR= \frac{TP}{TP+FN} TPR=TP+FNTP 假阳性率: F P R = F P F P + T N FPR= \frac{FP}{FP+TN} FPR=FP+TNFP
ROC曲线的横坐标为FPR,纵坐标为TPR
如何利用ROC曲线对比性能: ROC曲线下的面积(AUC)作为衡量指标,面积越大,性能越好
AUC就是衡量学习器优劣的一种性能指标。从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得。 AUC的统计意义是从所有正样本随机抽取一个正样本,从所有负样本随机抽取一个负样本,对应的预测probability中该正样本排在负样本前面的概率。 计算原理:所有的样本对中被正确排序的样本对(正类排在负类前面)的比例。
则AUC计算公式为: A U C = C o r r e c t P a i r M ∗ N AUC=\frac{CorrectPair}{M*N} AUC=M∗NCorrectPair
def cacu_auc(label, prob):
''' :param label: 样本的真实标签 :param prob: 分类模型的预测概率值,表示该样本为正类的概率 :return: 分类结果的AUC '''
# 将label 和 prob组合,这样使用一个key排序时另一个也会跟着移动
temp = list(zip(label, prob))
# 将temp根据prob的概率大小进行升序排序
rank = [val1 for val1, val2 in sorted(temp, key=lambda x: x[1])]
# 将排序后的正样本的rank值记录下来
rank_list = [i+1 for i in range(len(rank)) if rank[i]==1]
# 计算正样本个数m
M = sum(label)
# 计算负样本个数N
N=len(label)-M
return (sum(rank_list)-M*(M+1)/2)/(M*N)
这里特指负样本数量远大于正样本时,在这类问题中,我们往往更关注正样本是否被正确分类,即TP的值。PR曲线更适合度量类别不平衡问题中:
参考 [1]: https://blog.csdn.net/ft_sunshine/article/details/108833761 [2]: 《机器学习》周志华
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179653.html原文链接:https://javaforall.cn