学习笔记--bag of words(3)--roc曲线,precision/recall曲线,ap

本文介绍如何使用OpenCV生成ROC(接收者操作特性)曲线和Precision-Recall(精确率-召回率)曲线,并通过gnuplot工具进行可视化。文章详细描述了计算图像置信度、精确率及召回率的过程,最终生成可视化图表。

关于这两个曲线的概念可以看wiki

http://en.wikipedia.org/wiki/ROC_curve  roc

http://en.wikipedia.org/wiki/Precision_and_recall precision

 

recall 翻译为召回,或者叫做查全率,我理解叫做调出率更好。

ap就是平均正确率,average precision,还有map,mean ap,宏平均正确率

 

这里主要涉及如何画这两个曲线。

 

opencv中的例子,生成的是plt文件,这个文件可以用gnuplot来运行。

gnuplot的使用可以看

http://t16web.lanl.gov/Kawano/gnuplot/intro/working-e.html

 

例子已经生成了plt文件。

只要通过 gnuplot < **。plt就可以了。例子中的输出是一个png文件,一开始还以为会跳出一个窗口,后来看了plt文件才明白,输出的是一个png文件,在当前目录下。plt文件可以用记事本打开看。

 

 

bows例子中这个曲线是怎么产生的呢?

大致步骤如下:1)计算每个图像的confidence,2)计算每个类的precision/recall  3) 生成plt文件。

 最后 如果要对数据进行更多的处理,可以打开vocabulary。xml文件。

 

 例子中默认内存大小是200M,大概用了30%的图片和中的30%的特征向量。识别结果,ap低的可怜。

我设置为2000M,结果在left 2153个图片处出错了。。没提示信息,自动退出。debug 跟踪提示是内存定位错误,估计是内部不够引起的。而且出错了重头开始有要重新计算sift特征。很是不效率。而且后面计算图像描述的时候还是要计算sift特征。如果可以从文件中读,就好多了。。接下去就做这个改进吧。否则实验做不下去了。电脑和大牛的不能比啊。

 

 

### Precision-Recall 曲线的含义及图像弯曲分析 #### 1. **Precision-Recall 曲线的定义** Precision-Recall 曲线展示了模型在不同阈值下的 PrecisionRecall 的变化关系。Precision 表示模型预测为正类的样本中,实际为正类的比例;Recall 表示实际为正类的样本中,被模型正确预测为正类的比例[^1]。 #### 2. **曲线的意义** Precision-Recall 曲线越靠近右上角,则表示模型的性能越好。当曲线接近图表的右上角时,意味着模型在保持高召回率的同时,也能够保持较高的精确度。因此,Precision-Recall 曲线可以用于评估模型的整体表现,并帮助找到一个合适的阈值来平衡模型的召回率和精确度。 #### 3. **图像弯曲所反映的信息** Precision-Recall 曲线的形状可以提供关于模型性能的重要信息: - 如果曲线较为陡峭且靠近右上角,则说明模型在不同的阈值下都能保持较高的 PrecisionRecall,表明模型性能良好。 - 如果曲线较为平缓或呈现锯齿状,则可能说明模型对某些阈值的变化较为敏感,或者数据分布不均衡。 - 如果曲线在某个 Recall 值处出现明显的下降,则可能表明在该阈值下,模型的 Precision 显著降低,需要进一步优化模型或调整阈值。 #### 4. **代码示例:绘制 Precision-Recall 曲线** 以下是一个绘制 Precision-Recall 曲线的 Python 示例代码: ```python from sklearn.metrics import precision_recall_curve import matplotlib.pyplot as plt import numpy as np # 示例数据:真实标签和预测概率 y_true = np.array([0, 1, 1, 0, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8, 0.6]) # 计算 PrecisionRecall precision, recall, thresholds = precision_recall_curve(y_true, y_scores) # 绘制 Precision-Recall 曲线 plt.plot(recall, precision, marker=&#39;.&#39;) plt.xlabel(&#39;Recall&#39;) plt.ylabel(&#39;Precision&#39;) plt.title(&#39;Precision-Recall Curve&#39;) plt.show() ``` #### 5. **AUC 面积的意义** Precision-Recall 曲线下的面积(AUC)可以作为模型性能的一个综合指标。AUC 越大,表示模型的性能越好。然而,在类别不平衡的情况下,Precision-Recall AUC 比 ROC AUC 更能反映模型的真实性能[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值