Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在WANG数据库上计算精度和召回率_Matlab_Image Processing_Cbir_Precision Recall - Fatal编程技术网

Matlab 在WANG数据库上计算精度和召回率

Matlab 在WANG数据库上计算精度和召回率,matlab,image-processing,cbir,precision-recall,Matlab,Image Processing,Cbir,Precision Recall,我在MATLAB中制作了一个CBIR系统,并使用相似性度量作为欧氏距离。 对每个查询图像使用此选项,我将检索前20个图像 我已经使用了用于测试我的系统。 它包含10个类(如非洲人、公共汽车、玫瑰等),每个类包含100张图片(总共1000张图片) 我的方法: 1.我使用相关图、共现矩阵(CCM)和像素扫描模式之间的差异(DBPSP)来构造向量(分别为64+196+28=288维) 每一个1000分贝的图像我有它的向量事先构造 现在出现了一个查询图像,我也构造了它的向量(又是228维) 我使用欧几里

我在MATLAB中制作了一个CBIR系统,并使用相似性度量作为欧氏距离。 对每个查询图像使用此选项,我将检索前20个图像

我已经使用了用于测试我的系统。
它包含10个类(如非洲人、公共汽车、玫瑰等),每个类包含100张图片(总共1000张图片)

我的方法:
1.我使用相关图、共现矩阵(CCM)和像素扫描模式之间的差异(DBPSP)来构造向量(分别为64+196+28=288维)

  • 每一个1000分贝的图像我有它的向量事先构造
  • 现在出现了一个查询图像,我也构造了它的向量(又是228维)
  • 我使用欧几里得距离来表示相似性,并按照欧几里得距离的降序对db图像向量进行排序
  • 显示了前20个结果

  • 在这20种情况下,我可以选择TP或FP

  • 对于单个查询图像,我可以很容易地计算精度和召回率,并使用此方法绘制PR曲线

    我怎么能对全班做同样的事情呢

    我的方法是:对于每一张属于A类的图片,找出前20张图片,分别是TP(真阳性)和FP(假阳性)

    A类精度=1500/(2000)=.75(正确吗??)
    A类召回--->卡滞???

    PR曲线-->卡滞??有些链接说我需要一个分类器,有些则不是。。。我真的很困惑。

    正如您所说,您可以按如下方式计算精度

    P = TP ./ ( TP + FP );
    
    但是,您需要有FN或总错误数来计算召回率。因此,您需要找到一种方法来确定FN和FP数据。然后,您可以使用以下公式计算召回率

    R = TP ./ ( TP + FN )
    
    如果您有混淆矩阵或数据,可以使用我的自定义混淆Mat2F1.m计算精度、召回率和f1分数。这假设混淆矩阵的格式为how。每行的解释都是内联的。请让我知道,如果你想要更多的澄清

    function [F,P,R] = confusionmat2f1( C )
        %% confusionmat2f1( C )
        %
        % Inputs
        % C - Confusion Matrix
        %
        % Outputs
        % F - F1 score column vector
        % P - Precision column vector
        % R - Recall column vector
        
        %% 
        
        % Confusion Matrix to Probability
        M = sum( C, 3 );
        
        % Calculate Precision
        P = diag(M) ./ sum(M,1)';
        
        % Calculate Recall
        R = diag(M) ./ sum(M,2);
    
        % Calculate F1 Score
        F = f1( P, R );
    

    你有混淆矩阵还是只有TP/FP?只有TP和FP。在20张图像中,如果图像属于正确的类别,我会将TP增加1,如果不是,我会将FP增加1。如何检查图像的类别是否正确简单,如a类图像从0-99,B类图像从100-199,依此类推。一个简单的if-else循环给了我答案。好吧,我的解决方案不起作用了:(让我发布一个新的,关于FN或false的数量如何?你需要重新计算我如何计算FN和TN?我能做的唯一操作是拍摄一张图像并找到前20张图像,然后在20张图像中,如果图像属于正确的类别,我将TP增加1,如果不是,我将FP增加1。没有我们,我不能这样做吗ing分类器?如果否,您能建议在MATLAB中内置一些吗?对于FN,这些是分类为否的,但实际上是肯定的。对于TN,这些是分类为否的,实际上是否的。您需要6个变量中的4个(TN、FN、TP、FP、total true、total false)计算精度和召回率。您需要重写代码来解释其中一个变量,但我建议您创建一个混淆矩阵。这使分析更容易:)两者都不难。只要您知道类的分类以及基本事实(它应该是什么)是的,您可以将其输入到
    confusionmat
    函数中。同时,拥有类预测和类预期向量将使调试更加容易:我没有使用任何分类。我只是在查找queryImageVector和所有dbImageVector之间的欧几里德距离。至少我按降序对它们进行排序并检索前20名。是吗那我算不上回忆了?
    function [F,P,R] = confusionmat2f1( C )
        %% confusionmat2f1( C )
        %
        % Inputs
        % C - Confusion Matrix
        %
        % Outputs
        % F - F1 score column vector
        % P - Precision column vector
        % R - Recall column vector
        
        %% 
        
        % Confusion Matrix to Probability
        M = sum( C, 3 );
        
        % Calculate Precision
        P = diag(M) ./ sum(M,1)';
        
        % Calculate Recall
        R = diag(M) ./ sum(M,2);
    
        % Calculate F1 Score
        F = f1( P, R );