How to compare matrices with different dimensions?

5 views (last 30 days)
I wrote a code for classification by using 5 classifiers and at the end I used voting this code is for initia defining of train and test data:
clear all
close all
clc
load liver.mat;
data=Liver;
[n,m]=size(data);
rows=(1:n);
test_count=floor((1/6)*n);
sum_ens=0;sum_result=0;
test_rows=randsample(rows,test_count);
train_rows=setdiff(rows,test_rows);
test=data(test_rows,:);
train=data(train_rows,:);
xtest=test(:,1:m-1);
ytest=test(:,m);
xtrain=train(:,1:m-1);
ytrain=train(:,m);
I put the resault of each classifier in out 1-5 and then aggregate them in output and compared output with test labels :
out1 = majorityvote(tt(1,:));
out2 = majorityvote(tt(2,:));
out3 = majorityvote(tt(3,:));
out4 = majorityvote(tt(4,:) );
out5 = majorityvote(tt(5,:) );
output=[out1,out2,out3,out4,out5];
for i=1:test_count
if(output(i)==1 && ytest(i)==1)
tp_ens=tp_ens+1;
end
if(output(i)==0 && ytest(i)==0)
tn_ens=tn_ens+1;
end
if(output(i)==0 && ytest(i)==1)
fp_ens=fp_ens+1;
end
if(output(i)==1 && ytest(i)==0)
fn_ens=fn_ens+1;
end
end
this codes doesn't have any problems with other datasets in this part but for the liver data (attached) It shows this error:
Index exceeds matrix dimensions.
Error in pimaclassify_new (line 174)
if(output(i)==1 && ytest(i)==1)
Maybe because the number of test_count for specified number of rows of data were obtained 5 so comparing them with test labels was true but for liver data which have different number of rows , this comparing shows error.
Should I change the sizes of outputs of classifiers or the size of test data or test_count?
I'll be grateful to have your opinions about fixing the error.
Thanks
  6 Comments
Bob Thompson
Bob Thompson on 24 Jun 2019
You bring up a good point about the size of the output of majorityvote, I should not have assumed it was a single element. With that said though, why would the result be a single column vector, when the input is a single row vector. It would make sense with the original concatenation of output, but it seems like a confusing way to write the function. Also, do we know that majorityvote(tt) will automatically consider the rows individually, or will it simple take the entire array as a single large input?
Guillaume
Guillaume on 24 Jun 2019
If majorityvote is a vector, since tt(row, :) is a vector (column or row doesn't matter), then majorityvote(tt(row, :)) will be the same shape as majorityvote. A(B) is the shape of A when both A and B are vectors
If majorityvote is not a vector, then majorityvote(tt(row, :)) will be the same shape as tt(row, :) hence a column vector. A(B) is the shape of B when either A or B is not a vector.
An annoying or useful inconsistency depending on your point of view.
A corollary of the above is that output = majorityvote(tt) will be the same size as tt, with output(r, c) equal to majorityvote(tt(r, c))

Sign in to comment.

Answers (0)

Categories

Find more on Parallel for-Loops (parfor) in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!