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)

 

 

posted @   hailong  阅读(5622)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 上周热点回顾(1.20-1.26)
· 【译】.NET 升级助手现在支持升级到集中式包管理
点击右上角即可分享
微信分享提示