分类算法-2.精准率和召回率曲线

精准率和召回率是两个不同的评价指标,很多时候它们之间存在着差异,具体在使用的时候如何解读精准率和召回率,应该视具体使用场景而定

有些场景,人们可能更注重精准率,如股票预测系统,我们定义股票升为1,股票降为0,我们更关心的是未来升的股票的比例,而在另外一些场景中,人们更加注重召回率,如癌症预测系统,定义健康为1,患病为0,我们更关心癌症患者检查的遗漏情况。

F1 Score

F1 Score 兼顾精准率和召回率,它是两者的调和平均值

\[\frac{1}{F1} = \frac{1}{2}(\frac{1}{Precision} + \frac{1}{recall})\]
\[F1 = \frac{2\cdot precision\cdot recall}{precision+recall}\]
定义F1 Score

def f1_score(precision,recall):
    try:
        return 2*precision*recall/(precision+recall)
    except:
        return 0

由上看出,F1 Score更偏向于分数小的那个指标

Precision-Pecall的平衡

精准率和召回率是两个互相矛盾的目标,提高一个指标,另一个指标就会不可避免的下降。如何达到两者之间的一个平衡呢?

回忆逻辑回归算法的原理:将一个结果发生的概率大于0.5,就把它分类为1,发生的概率小于0.5,就把它分类为0,决策边界为:\(\theta ^T \cdot X_b = 0\)

这条直线或曲线决定了分类的结果,平移决策边界,使\(\theta ^T \cdot X_b\)不等于0而是一个阈值:\(\theta ^T \cdot X_b = threshold\)


圆形代表分类结果为0,五角星代表分类结果为1,由上图可以看出,精准率和召回率是两个互相矛盾的指标,随着阈值的逐渐增大,召回率逐渐降低,精准率逐渐增大。



编程实现不同阀值下的预测结果及混淆矩阵

from sklearn.linear_model import LogisticRegression

# 数据使用前一节处理后的手写识别数据集
log_reg = LogisticRegression()
log_reg.fit(x_train,y_train)

求每个测试数据在逻辑回归算法中的score值:

decision_score = log_reg.decision_function(x_test)

不同阀值下预测的结果

y_predict_1 = numpy.array(decision_score>=-5,dtype='int')
y_predict_2 = numpy.array(decision_score>=0,dtype='int')
y_predict_3 = numpy.array(decision_score>=5,dtype='int')

查看不同阈值下的混淆矩阵:

精准率-召回率曲线

求出0.1步长下,阈值在[min,max]区间下的精准率和召回率,查看其曲线特征:

threshold_scores = numpy.arange(numpy.min(decision_score),numpy.max(decision_score),0.1)

precision_scores = []
recall_scores = []

# 求出每个分类阈值下的预测值、精准率和召回率
for score in threshold_scores:
    y_predict = numpy.array(decision_score>=score,dtype='int')
    precision_scores.append(precision_score(y_test,y_predict))
    recall_scores.append(recall_score(y_test,y_predict))

画出精准率和召回率随阈值变化的曲线

plt.plot(threshold_scores,precision_scores)
plt.plot(threshold_scores,recall_scores)
plt.show()

画出精准率-召回率曲线

plt.plot(precision_scores,recall_scores)
plt.show()

sklearn中的精准率-召回率曲线

from sklearn.metrics import precision_recall_curve

precisions,recalls,thresholds = precision_recall_curve(y_test,decision_score)

# sklearn中最后一个精准率为1,召回率为0,没有对应的threshold
plt.plot(thresholds,precisions[:-1])
plt.plot(thresholds,recalls[:-1])
plt.show()

原文地址:https://www.cnblogs.com/shuai-long/p/11609409.html

时间: 2024-08-01 06:18:16

分类算法-2.精准率和召回率曲线的相关文章

一文让你彻底理解准确率,精准率,召回率,真正率,假正率,ROC/AUC

参考资料:https://zhuanlan.zhihu.com/p/46714763 ROC/AUC作为机器学习的评估指标非常重要,也是面试中经常出现的问题(80%都会问到).其实,理解它并不是非常难,但是好多朋友都遇到了一个相同的问题,那就是:每次看书的时候都很明白,但回过头就忘了,经常容易将概念弄混.还有的朋友面试之前背下来了,但是一紧张大脑一片空白全忘了,导致回答的很差. 我在之前的面试过程中也遇到过类似的问题,我的面试经验是:一般笔试题遇到选择题基本都会考这个率,那个率,或者给一个场景让

精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么?

作者:竹间智能 Emotibot链接:https://www.zhihu.com/question/30643044/answer/161955532来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 精确率(Precision)是指在所有系统判定的“真”的样本中,确实是真的的占比,就是TP/(TP+FP). 召回率(Recall)是指在所有确实为真的样本中,被判为的“真”的占比,就是TP/(TP+FN). FPR(False Positive Rate),又被称为“

精确率与召回率,RoC曲线与PR曲线

在机器学习的算法评估中,尤其是分类算法评估中,我们经常听到精确率(precision)与召回率(recall),RoC曲线与PR曲线这些概念,那这些概念到底有什么用处呢? 首先,我们需要搞清楚几个拗口的概念: 1. TP, FP, TN, FN True Positives,TP:预测为正样本,实际也为正样本的特征数 False Positives,FP:预测为正样本,实际为负样本的特征数 True Negatives,TN:预测为负样本,实际也为负样本的特征数 False Negatives,

准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure

yu Code 15 Comments 机器学习(ML),自然语言处理(NLP),信息检索(IR)等领域,评估(Evaluation)是一个必要的 工作,而其评价指标往往有如下几点:准确率(Accuracy),精确率(Precision),召回率(Recall)和F1-Measure.(注: 相对来说,IR 的 ground truth 很多时候是一个 Ordered List, 而不是一个 Bool 类型的 Unordered Collection,在都找到的情况下,排在第三名还是第四名损失并

精确率和召回率

我自己通俗的解释: 查全率=召回率=集合里面一共有多少个A,我们正确识别出多少个A,两个比一下 查准率=精确率=在识别出的结果A集合里面,有多少是真正的A,两个比一下 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #4545

Elasticsearch学习之深入搜索六 --- 平衡搜索结果的精准率和召回率

1. 召回率和精准度 比如你搜索一个java spark,总共有100个doc,能返回多少个doc作为结果,就是召回率,recall 精准度,比如你搜索一个java spark,能不能尽可能让包含java spark,或者是java和spark离的很近的doc,排在最前面,precision 直接用match_phrase短语搜索,会导致必须所有term都在doc field中出现,而且距离在slop限定范围内,才能匹配上 match phrase,proximity match,要求doc必须

文本分类之情感分析– 准确率和召回率

Accuracy不是评估分类器的有效性的唯一度量.另外两个有用的指标是precision和recall.这两个度量可提供二元分类器的性能特征的更多视角. 分类器的 Precision Precision度量一个分类器的正确性.较高的精确度意味着更少的误报,而较低精度意味着更多的误报.这经常与recall相反,作为一种简单的方法来提高精度,以减少召回. 分类器的 Recall 召回度量分类器的完整性,或灵敏度.较高的召回意味着更少的假负,而较低的召回意味着更多的假负.提高召回率往往可以降低精确度,

准确率,精确率,召回率,F-measure 之间的关系

总结: 模型条件放宽,负类被误判为正类的可能性就变大(即FP变大)精确率和准确率会受影响(变小) 模型条件变严格,正类有可能被误判为负类(即FN变大)召回率会变小 F-measure是一种统计量,F-Measure又称为F-Score,F-Measure是Precision和Recall加权调和平均,是IR(信息检索)领域的常用的一个评价标准,常用于评价分类模型的好坏. F1=2*PR  / (P+R) (P精确率,R召回率) 一般通过找到最大的F1,可以找到模型的最优阀值(阀值并不是最大最好,

斯坦福大学公开课机器学习:machine learning system design | trading off precision and recall(F score公式的提出:学习算法中如何平衡(取舍)查准率和召回率的数值)

一般来说,召回率和查准率的关系如下:1.如果需要很高的置信度的话,查准率会很高,相应的召回率很低:2.如果需要避免假阴性的话,召回率会很高,查准率会很低.下图右边显示的是召回率和查准率在一个学习算法中的关系.值得注意的是,没有一个学习算法是能同时保证高查准率和召回率的,要高查准率还是高召回率,取决于自己的需求.此外,查准率和召回率之间的关系曲线可以是多样性,不一定是图示的形状. 如何取舍查准率和召回率数值: 一开始提出来的算法有取查准率和召回率的平均值,如下面的公式average=(P+R)/2