在用哈希进行检索时,常会用到precision recall曲线对其性能进行定量评价。precision recall的定义在信息检索评价指标中已做了详细说明,这里再记录一下precision recall的具体实现。

precision recall曲线matlab一般使用的都是下面的版本:

function[recall, precision, rate] =recall_precision(Wtrue, Dhat)

%

% Input:

% Wtrue = true neighbors [Ntest * Ndataset], can be a full matrix NxN

% Dhat = estimated distances

%

% Output:

%

% exp. # of good pairs inside hamming ball of radius <= (n-1)

% precision(n) = --------------------------------------------------------------

% exp. # of total pairs inside hamming ball of radius <= (n-1)

%

% exp. # of good pairs inside hamming ball of radius <= (n-1)

% recall(n) = --------------------------------------------------------------

% exp. # of total good pairs

max_hamm = max(Dhat(:))

hamm_thresh = min(3,max_hamm);

[Ntest, Ntrain] = size(Wtrue);

total_good_pairs = sum(Wtrue(:));

% find pairs with similar codes

precision = zeros(max_hamm,1);

recall = zeros(max_hamm,1);

rate = zeros(max_hamm,1);

for n = 1:length(precision)

j = (Dhat<=((n-1)+0.00001));

%exp. # of good pairs that have exactly the same code

retrieved_good_pairs = sum(Wtrue(j));

% exp. # of total pairs that have exactly the same code

retrieved_pairs = sum(j(:));

precision(n) = retrieved_good_pairs/retrieved_pairs;

recall(n)= retrieved_good_pairs/total_good_pairs;

rate(n) = retrieved_pairs / (Ntest*Ntrain);

end

% The standard measures for IR are recall and precision. Assuming that:

%

% * RET is the set of all items the system has retrieved for a specific inquiry;

% * REL is the set of relevant items for a specific inquiry;

% * RETREL is the set of the retrieved relevant items

%

% then precision and recall measures are obtained as follows:

%

% precision = RETREL / RET

% recall = RETREL / REL

% if nargout == 0 || nargin > 3

% if isempty(fig);

% fig = figure;

% end

% figure(fig)

%

% subplot(311)

% plot(0:hamm_thresh-1, precision(1:hamm_thresh), varargin{:})

% hold on

% xlabel('hamming radius')

% ylabel('precision')

%

% subplot(312)

% plot(0:hamm_thresh-1, recall(1:hamm_thresh), varargin{:})

% hold on

% xlabel('hamming radius');

% ylabel('recall');

%

% subplot(313);

% plot(recall, precision, varargin{:});

% hold on;

% axis([0 1 0 1]);

% xlabel('recall');

% ylabel('precision');

%

% drawnow;

% end

function[score, recall] =evaluation(Wtrue, Dhat, fig, varargin)

%

% Input:

% Wtrue = true neighbors [Ntest * Ndataset], can be a full matrix NxN

% Dhat = estimated distances

% The next inputs are optional:

% fig = figure handle

% options = just like in the plot command

%

% Output:

%

% exp. # of good pairs inside hamming ball of radius <= (n-1)

% score(n) = --------------------------------------------------------------

% exp. # of total pairs inside hamming ball of radius <= (n-1)

%

% exp. # of good pairs inside hamming ball of radius <= (n-1)

% recall(n) = --------------------------------------------------------------

% exp. # of total good pairs

[Ntest, Ntrain] = size(Wtrue);

total_good_pairs = sum(Wtrue(:));

% find pairs with similar codes

score = zeros(20,1);

for n = 1:length(score)

j = find(Dhat<=((n-1)+0.00001));

%exp. # of good pairs that have exactly the same code

retrieved_good_pairs = sum(Wtrue(j));

% exp. # of total pairs that have exactly the same code

retrieved_pairs = length(j);

score(n) = retrieved_good_pairs/retrieved_pairs;

recall(n)= retrieved_good_pairs/total_good_pairs;

end

% The standard measures for IR are recall and precision. Assuming that:

%

% * RET is the set of all items the system has retrieved for a specific inquiry;

% * REL is the set of relevant items for a specific inquiry;

% * RETREL is the set of the retrieved relevant items

%

% then precision and recall measures are obtained as follows:

%

% precision = RETREL / RET

% recall = RETREL / REL

if nargout == 0 || nargin > 3

if isempty(fig);

fig = figure;

end

figure(fig)

subplot(211)

plot(0:length(score)-1, score, varargin{:})

hold on

xlabel('hamming radium')

ylabel('percent correct (precision)')

title('percentage of good neighbors inside the hamm ball')

subplot(212)

plot(recall, score, varargin{:})

hold on

axis([0 1 0 1])

xlabel('recall')

ylabel('percent correct (precision)')

drawnow

end

不能看出,上面的score就是前面的precision,在追溯到08年,也就是谱哈希SH发表的那年,同样可以在SH中有画precision recall的曲线,跟第二个一样。考证这些,无非就是想说在自己画PR曲线时,就用这些牛提供的比较靠谱,自己写出来的不一定对。

好了,再对画precision recall输入的参数做些梳理。画precision recall曲线时,用到的groundtruth是原欧式空间中查询样本的近邻,所以在计算Wtrue时,可以采用下面的方法计算:

%center, then normalize data

X = X - ones(size(X,1),1)*mean(X);

for i = 1:size(X,1)

X(i,:) = X(i,:) / norm(X(i,:));

end

rp = randperm(size(X,1));

trIdx = rp(1:trN);

testIdx = rp(trN+1:trN+testN);

Xtr = X(trIdx,:);

Xtst = X(testIdx,:);

D_tst = distMat(Xtst,Xtr);

D_tr = distMat(Xtr);

Dball = sort(D_tr,2);

Dball = mean(Dball(:,50));

WTT = D_tst < Dball;

上面第一步先对数据进行中心化,然后进行归一化。之后挑选出训练样本和测试样本(查询样本),然后计算Wture。Dhat就是计算查询样本与database之间的汉明距离,可以通过下面方法计算:

%get Hamming distance between queries and database

B1 = compactbit(H);

B2 = compactbit(H_query);

Dhamm = hammingDist(B2,B1);

H是database中的编码,进行压缩以十进制数进行表示,同理H_query即为查询样本的编码。将上面都计算出来后,便可以得到precision和recall,plot一下就可以了。

参考:

matlab drawnow连成曲线,precision recall曲线Matlab实现相关推荐

  1. 图片检索matlab程序,图像检索:precision recall曲线Matlab实现

    在用哈希进行检索时,常会用到precision recall曲线对其性能进行定量评价.precision recall的定义在信息检索评价指标中已做了详细说明,这里再记录一下precision rec ...

  2. 查准率-查全率precision recall(PR)曲线Matlab实现

    在用哈希进行检索时,常会用到precision recall曲线对其性能进行定量评价.precision recall的定义在信息检索评价指标中已做了详细说明,这里再记录一下precision rec ...

  3. 多分类问题中每一类的Precision-Recall Curve曲线以及ROC的Matlab画法

    这两天写论文中,本来设计的是要画这个Precision-Recall Curve的,因为PRC是从信息检索中来的,而且我又做的类似一个检索,所以要画这个图,但是我靠,竟然发现不好画,找了很多资料等.最 ...

  4. R语言使用yardstick包的pr_curve函数评估二分类(binary)模型的性能、并使用autoplot函数可视化模型的PR曲线(precision recall)

    R语言使用yardstick包的pr_curve函数评估二分类(binary)模型的性能.并使用autoplot函数可视化模型的PR曲线(precision recall) 目录

  5. 02_混淆矩阵、准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure) +Roc曲线和PR曲线+sklearn中分类模型评估API+ 自己补充整理

    此博文参考: 关于ROC绘制参考博文: https://blog.csdn.net/u011630575/article/details/80250177 Python+ROC相关的博文: https ...

  6. matlab光顺拐点,基于MATLAB的最大误差双圆弧逼近曲线的算法及实现.pdf

    基于MATLAB的最大误差双圆弧逼近曲线的算法及实现.pdf 第31卷第6期 基于MⅢB的最大误差双圆弧逼近曲线的算法及实现 文章编号:1004-2539120町]06一唧一∞ 基于MAⅡ.AB的最大 ...

  7. PR(precision recall curve)曲线是什么?PR曲线如何绘制?为什么Precision和Recall是矛盾体、此消彼长?为什么提出F1指标?

    PR(precision recall curve)曲线是什么?PR曲线如何绘制?为什么PR是矛盾体.此消彼长?为什么提出F1指标? sklearn.metrics.precision_recall_ ...

  8. MATLAB plot函数绘制二维曲线

    1.plot函数的基本调用 在MATLAB中,在直角坐标系下绘制二维曲线一般使用plot函数. 基本调用格式: plot(x,y) x,y是长度一致的向量,例如: >> x=0:pi/10 ...

  9. matlab填充封闭包含区域,求指导matlab怎么填充曲线构成的封闭区域

    matlab里面怎么填充两条曲线和右边界所围成的封闭区域.如下图 两条曲线是由两组数据构成的 789.JPG 两组数据为 2.70E-04        7.40E+02 3.52E-04      ...

最新文章

  1. skia库的3D变换研究
  2. Could not find codec parameters for stream 0 (Video: h264, none)
  3. java程序设计基础29_java程序设计基础实验29
  4. 工业机器人九龙坡区职教中心_山西省襄汾县职教中心“智能工业机器人订单班”学生集体观看直播“2020一带一路暨金砖国家技能发展与技术创新大赛”...
  5. 【上海】关于云计算,你想学习哪些知识,快让我来满足你
  6. EF架构~codeFirst从初始化到数据库迁移
  7. 支付宝辟谣交易 5 万受监控;App Store 宕机;谷歌抛弃 AI | 极客头条
  8. 《罗辑思维》让知识交融做爱
  9. 祝威廉 :Rust FFI 实践
  10. 【数模】模糊综合评价模型
  11. java事务是什么_在java中,事务是什么?
  12. 代码里颜色设置表RGB+CMYK
  13. Spring AOP具象化理解(代理模式)
  14. iOS开发:苹果开发者账号第一次新建APP ID以及创建App的步骤
  15. 传奇怎么设置不显示服务器,如何将传奇服务器未知神殿地图修改为不限制进出...
  16. 学习笔记:几种矩阵乘法(matmul product普通乘积、hadamard product矩阵点乘、kronecker product克罗内克积、斯特拉森矩阵乘法)
  17. static修饰的特点
  18. Focal loss 和 GHM
  19. 1024程序员节!!
  20. 城中村、小区WiFi覆盖方案

热门文章

  1. 一个显示日期的工具类
  2. 用Mysql网页式管理工具安全地访问数据库的方法
  3. Chrome跨域问题
  4. 远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助...
  5. 数据质量提升_合作提高数据质量
  6. 862. 和至少为 K 的最短子数组
  7. Hadoop安装及配置
  8. leetcode97. 交错字符串(动态规划)
  9. 解释什么是快速排序算法?_解释排序算法
  10. 如何使用HTML5,JavaScript和Bootstrap构建自定义文件上传器