Karan
Karan

Reputation: 11681

Matlab : decision tree shows invalid output values

I'm making a decision tree using the classregtree(X,Y) function. I'm passing X as a matrix of size 70X9 (70 data objects, each having 9 attributes), and Y as a 70X1 matrix. Each one of my Y values is either 2 or 4. However, in the decision tree formed, it gives values of 2.5 or 3.5 for some of the leaf nodes.

Any ideas why this might be caused?

Upvotes: 1

Views: 1782

Answers (2)

damned
damned

Reputation: 945

You are using classregtree in regression mode (which is the default mode). Change the mode to classification mode.

Upvotes: 3

Amro
Amro

Reputation: 124573

Here is an example using CLASSREGTREE for classification:

%# load dataset
load fisheriris

%# split training/testing
cv = cvpartition(species, 'holdout',1/3);
trainIdx = cv.training;
testIdx = cv.test;

%# train
t = classregtree(meas(trainIdx,:), species(trainIdx), 'method','classification', ...
    'names',{'SL' 'SW' 'PL' 'PW'});

%# predict
pred = t.eval(meas(testIdx,:));

%# evaluate
cm = confusionmat(species(testIdx),pred)
acc = sum(diag(cm))./sum(testIdx)

The output (confusion matrix and accuracy):

cm =
    17     0     0
     0    13     3
     0     2    15
acc =
          0.9

tree

Now if your target class is encoded as numbers, the returned prediction will still be cell array of strings, so you have to convert them back to numbers:

%# load dataset
load fisheriris
[species,GN] = grp2idx(species);

%# ...

%# evaluate
cm = confusionmat(species(testIdx),str2double(pred))
acc = sum(diag(cm))./sum(testIdx)

Note that classification will always return strings, so I think you might have mistakenly used the method=regression option, which performs regression (numeric target) not classification (discrete target)

Upvotes: 1

Related Questions