Code covered by the BSD License  

Highlights from
Fuzzy ARTMAP

image thumbnail
from Fuzzy ARTMAP by Massimiliano Versace
This package contains an implementation of Fuzzy ARTMAP.

[A,A_norm,avg_acc]=confMatrixPlot(actual,predicted,c,varargin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This is an implementation of an ARTMAP variant,
% as described in:
% Gaddam, C. S. (2007).
% Feature Selection via transmitter depletion in ARTMAP. Online Document, xx(x) xxx-xxx.
% Boston, MA: Boston University.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Programmed by Sai Chaitanya Gaddam (August 2007-08)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% The notation follows the article's notation,
% as does the headers for each step of the
% algorithm

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Usage: [conf_actual,conf_normalized]=confMatrix(actual,predicted|,[class_labels]|,dataset_title)
%Strings in class_labels will be used for axes labels if provided
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


function [A,A_norm,avg_acc]=confMatrixPlot(actual,predicted,c,varargin)

A=zeros(size(max(length(actual),length(unique(predicted)))));
A_norm=zeros(size(max(length(actual),length(unique(predicted)))));

if (nargin==5) || ((nargin==4) && ischar(varargin{1}))
    dataset_title=[varargin{nargin-3}, ': '];
else
    dataset_title='';
end

fontsize_val=12;
fontsize_val_offdiag=12;
fontsize_val_labels=12;
label_rotation=45;


%For Genome Data
% fontsize_val=4;
% fontsize_val_offdiag=4;
% fontsize_val_labels=4;


%actual_unique=unique(actual);
actual_unique=unique([c.W*[1:1:size(c.W,2)]' ; unique(actual)]);

for i=1:length(actual_unique)
    for j=1:length(actual_unique)
        A(i,j)=sum((actual(:)==actual_unique(i)).*(predicted(:)==actual_unique(j)));
        A_norm(i,j)=sum((actual(:)==actual_unique(i)).*(predicted(:)==actual_unique(j)))/sum((actual(:)==actual_unique(i)));
    end
end




imagesc(A*0)
%colormap([[1:-.01:.7]' [1:-.01:.7]' [1:-.01:.7]'] );
colormap([[1:-.01:1]' [1:-.01:1]' [1:-.01:1]'] );

class_labels=cell(length(actual_unique),1);
if ((nargin==3) || ((nargin==4) && ischar(varargin{1})))
    for i=1:length(actual_unique)
        class_labels{i}=num2str(actual_unique(i)-1);
    end
else
    class_labels=varargin{1}(actual_unique);
end

axis equal;
axis tight;

%set(gcf,'position',[1 -419 1600 946])
set(gca,'xticklabel','');
set(gca,'yticklabel','');
for i=1:length(actual_unique)
    for j=1:length(actual_unique)
        if (round(A(j,i))>0)
            if  (i~=j)
                h_curr=text(i,j,num2str(A(j,i)),'fontsize',fontsize_val_offdiag,'color',0*[0.4 0.4 0.4],'horizontalalignment','right');
            else
                h_curr=text(i,j,num2str(A(j,i)),'fontsize',fontsize_val,'fontweight','bold','color',[0 0 0],'horizontalalignment','right');
                h_extent=get(h_curr,'extent');
                text(h_extent(1)+h_extent(3),j,[' /' num2str(sum(A(j,:)))],'fontsize',fontsize_val,'color',[0 0 0],'horizontalalignment','left');
            end
        end
        if (j==1)
            if ~isnan(A_norm(i,i))
                percent_corr=num2str(A_norm(i,i)*100,3.2);
            else
                percent_corr='no test pts.';
            end

            text(length(actual_unique)+1,i,percent_corr,'fontsize',fontsize_val,'color',[0.8 0 0],'horizontalalignment','center');
            text(0.4,i,class_labels{i},'fontsize',fontsize_val_labels,'color',[0 0 0],'horizontalalignment','right','rotation',label_rotation);
        end
        if (i==1)
            %text(length(actual_unique)+1,i,num2str(sum(A(i,:))),'fontsize',fontsize_val,'color',[.8 0 0],'horizontalalignment','center');
            text(j,length(actual_unique)+.6,class_labels{j},'fontsize',fontsize_val_labels,'color',[0 0 0],'horizontalalignment','right','rotation',label_rotation);
        end

    end
end



text(length(actual_unique)+.75,0.5,'% Correct:' ,'fontsize',fontsize_val,'color',[.2 .2 .2],'horizontalalignment','left');
text(length(actual_unique)+.75,length(actual_unique)+.5,'Mean Accuracy:' ,'fontsize',fontsize_val,'color',[.2 .2 .2],'horizontalalignment','left');

A_norm_not_nan=diag(A_norm);
A_norm_not_nan=A_norm_not_nan(~isnan(A_norm_not_nan));
avg_acc=sum(A_norm_not_nan)*100/length(A_norm_not_nan);
avg_acc_str=num2str(avg_acc,3.2);
text(length(actual_unique)+ 1,length(actual_unique)+.75,[ avg_acc_str ' %'] ,'fontsize',fontsize_val,'color',[0.8 0 0],'horizontalalignment','center');

%h_title=title(dataset_title,'fontsize',fontsize_val);
%set(h_title,'position',get(h_title,'position'));
%h_ylab=ylabel('Actual Class','fontsize',fontsize_val_labels,'color',[.4 .4 1]);
%set(h_ylab,'position',get(h_ylab,'position')+[-0.5 0 0]);
%h_xlab=xlabel('Predicted Class','fontsize',fontsize_val_labels,'color',[.4 .4 1]);
%set(h_xlab,'position',get(h_xlab,'position')+[0 0.25 0]);
%x_pos=get(h_xlab,'position')+[0 0.25 0];
%text(x_pos(1),x_pos(2)+.2,['No. committed nodes: ' num2str(c.C) ' No. training pts: ' num2str(length(c.NodeList)) ],'fontsize',fontsize_val,'color',[0 0 0],'horizontalalignment','center');
% field_names=fieldnames(c);
% for i=1:length(field_names)
%
%     if length(c.(field_names{i}))<2
%     text(x_pos(1),x_pos(2)+.20*i,[field_names{i} ': ' num2str(c.(field_names{i}))],'fontsize',fontsize_val,'color',[0 0 0],'horizontalalignment','center');
%     else
%     text(x_pos(1),x_pos(2)+.20*i,[field_names{i} 'size : [' num2str(size(c.(field_names{i}))) ']'],'fontsize',fontsize_val,'color',[0 0 0],'horizontalalignment','center');
%     end
% end
set(gca,'ytick',[1:1:size(c.W,2)]+.5)
set(gca,'xtick',[1:1:size(c.W,2)]+.5)
set(gca,'linewidth',1.5)
grid

Contact us at files@mathworks.com