• matlab计算混淆矩阵


    function [confmatrix] = cfmatrix(actual, predict, classlist, per)
    % CFMATRIX calculates the confusion matrix for any prediction 
    % algorithm that generates a list of classes to which the test 
    % feature vectors are assigned
    %
    % Outputs: confusion matrix
    %
    %                 Actual Classes
    %                   p       n
    %              ___|_____|______| 
    %    Predicted  p'|     |      |
    %      Classes  n'|     |      |
    % 
    % Inputs: 
    % 1. actual / 2. predict
    % The inputs provided are the 'actual' classes vector
    % and the 'predict'ed classes vector. The actual classes are the classes
    % to which the input feature vectors belong. The predicted classes are the 
    % class to which the input feature vectors are predicted to belong to, 
    % based on a prediction algorithm. 
    % The length of actual class vector and the predicted class vector need to 
    % be the same. If they are not the same, an error message is displayed. 
    % 3. classlist
    % The third input provides the list of all the classes {p,n,...} for which 
    % the classification is being done. All classes are numbers.
    % 4. per = 1/0 (default = 0)
    % This parameter when set to 1 provides the values in the confusion matrix 
    % as percentages. The default provides the values in numbers.
    %
    % Example:
    % >> a = [ 1 2 3 1 2 3 1 1 2 3 2 1 1 2 3];
    % >> b = [ 1 2 3 1 2 3 1 1 1 2 2 1 2 1 3];
    % >> Cf = cfmatrix(a, b);
    %
    % [Avinash Uppuluri: avinash_uv@yahoo.com: Last modified: 08/21/08]
    
    % If classlist not entered: make classlist equal to all 
    % unique elements of actual
    if (nargin < 2)
       error('Not enough input arguments.');
    elseif (nargin == 2)
        classlist = unique(actual); % default values from actual
        per = 0; % default is numbers and input 1 for percentage
    elseif (nargin == 3)
        per = 0; % default is numbers and input 1 for percentage
    end
    
    if (length(actual) ~= length(predict))
        error('First two inputs need to be vectors with equal size.');
    elseif ((size(actual,1) ~= 1) && (size(actual,2) ~= 1))
        error('First input needs to be a vector and not a matrix');
    elseif ((size(predict,1) ~= 1) && (size(predict,2) ~= 1))
        error('Second input needs to be a vector and not a matrix');
    end
    format short g;
    n_class = length(classlist);
    line_two = '----------';
    line_three = '_________|';
    for i = 1:n_class
        obind_class_i = find(actual == classlist(i));
        prind_class_i = find(predict == classlist(i));
        confmatrix(i,i) = length(intersect(obind_class_i,prind_class_i));
        for j = 1:n_class
            %if (j ~= i)
            if (j < i)
            % observed j predicted i
            confmatrix(i,j) = length(find(actual(prind_class_i) == classlist(j))); 
            % observed i predicted j
            confmatrix(j,i) = length(find(predict(obind_class_i) == classlist(j)));
            end
        end
        line_two = strcat(line_two,'---',num2str(classlist(i)),'-----');
        line_three = strcat(line_three,'__________');
    end
    
    if (per == 1)
        confmatrix = (confmatrix ./ length(actual)).*100;
    end
    
    % output to screen
    disp('------------------------------------------');
    disp('             Actual Classes');
    disp(line_two);
    disp('Predicted|                     ');
    disp('  Classes|                     ');
    disp(line_three);
    
    for i = 1:n_class
        temps = sprintf('       %d             ',i);
        for j = 1:n_class
        temps = strcat(temps,sprintf(' |    %2.1f    ',confmatrix(i,j)));
        end
        disp(temps);
        clear temps
    end
    disp('------------------------------------------');
            
    

     调用:

    a=importdata('E:\\actual_label.txt');
    b=importdata('E:\\predict_label.txt');
    Cf = cfmatrix(a, b)
    
  • 相关阅读:
    【1】Chrome
    Vue
    GitHub版本控制工具入门(一)
    Vue.js 组件笔记
    最全的javascriptt选择题整理
    网站如何实现 在qq中发自己链接时,便自动获取链接标题、图片和部分内容
    js 唤起APP
    密码加密MD5,Bash64
    HTTP和HTTPS的区别及HTTPS加密算法
    计算机网络七层的理解
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2429385.html
Copyright © 2020-2023  润新知