Matlab:决策树显示无效的输出值

时间:2011-08-04 16:58:37

标签: matlab machine-learning decision-tree

我正在使用classregtree(X,Y)函数创建决策树。我将X传递为大小为70X9的矩阵(70个数据对象,每个具有9个属性),Y作为70X1矩阵。我的每个Y值都是2或4.但是,在形成的决策树中,它为某些叶节点赋予值2.5或3.5。

为什么会出现这种情况的任何想法?

2 个答案:

答案 0 :(得分:3)

您在回归模式下使用classregtree(这是默认模式)。 将模式更改为分类模式。

答案 1 :(得分:1)

以下是使用CLASSREGTREE进行分类的示例:

%# 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)

输出(混淆矩阵和准确度):

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

tree

现在,如果您的目标类被编码为数字,则返回的预测仍将是字符串的单元格数组,因此您必须将它们转换回数字:

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

%# ...

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

请注意,分类将始终返回字符串,因此我认为您可能错误地使用了method=regression选项,该选项执行regression(数字目标)而不是classification(离散目标)