Filter löschen
Filter löschen

What does this line of code do?

1 Ansicht (letzte 30 Tage)
Asim Shahzad
Asim Shahzad am 29 Mai 2021
Kommentiert: Cris LaPierre am 29 Mai 2021
I've been given a classifier performance evaluation code I'm trying to understand and run. The first line of code gives an error on my data.
ACTUAL = 9957x1 Categorical (My class labels)
When the code reaches the first line
idx = (ACTUAL()==1);
it says Invalid types for comparison. What exactly is this line of code trying to do? Understanding this will help me fix it.
Here's the function code:
function EVAL = Evaluate(ACTUAL,PREDICTED)
% This fucntion evaluates the performance of a classification model by
% calculating the common performance measures: Accuracy, Sensitivity,
% Specificity, Precision, Recall, F-Measure, G-mean.
% Input: ACTUAL = Column matrix with actual class labels of the training
% examples
% PREDICTED = Column matrix with predicted class labels by the
% classification model
% Output: EVAL = Row matrix with all the performance measures
idx = (ACTUAL()==1);
p = length(ACTUAL(idx));
n = length(ACTUAL(~idx));
N = p+n;
tp = sum(ACTUAL(idx)==PREDICTED(idx));
tn = sum(ACTUAL(~idx)==PREDICTED(~idx));
fp = n-tn;
fn = p-tp;
tp_rate = tp/p;
tn_rate = tn/n;
accuracy = (tp+tn)/N;
sensitivity = tp_rate;
specificity = tn_rate;
precision = tp/(tp+fp);
recall = sensitivity;
f_measure = 2*((precision*recall)/(precision + recall));
gmean = sqrt(tp_rate*tn_rate);
EVAL = [accuracy sensitivity specificity precision recall f_measure gmean];

Akzeptierte Antwort

Cris LaPierre
Cris LaPierre am 29 Mai 2021
You have a data type mismatch. You are passing in a variable (Actual) that is categorical, while the function you are using expects it to be either numeric or logical.
A=1:5
A = 1×5
1 2 3 4 5
idx1 = (A==1)
idx1 = 1×5 logical array
1 0 0 0 0
% Now as categorical
B=categorical(1:5)
B = 1×5 categorical array
1 2 3 4 5
idx2 = B==1
Error using == (line 30)
Invalid types for comparison.
  2 Kommentare
Asim Shahzad
Asim Shahzad am 29 Mai 2021
So this function will only work with class labels that are numerical?
Cris LaPierre
Cris LaPierre am 29 Mai 2021
I haven't tested your function, but the line of code giving the error will only work for numeric and logical data.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Statistics and Machine Learning Toolbox finden Sie in Help Center und File Exchange

Produkte


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by