我正在使用 classregtree(X,Y) 函数制作决策树。我将 X 作为大小为 70X9 的矩阵(70 个数据对象,每个对象有 9 个属性)传递,并将 Y 作为 70X1 矩阵传递。我的每个 Y 值都是 2 或 4。但是,在形成的决策树中,它为某些叶节点提供了 2.5 或 3.5 的值。
任何想法为什么会导致这种情况?
我正在使用 classregtree(X,Y) 函数制作决策树。我将 X 作为大小为 70X9 的矩阵(70 个数据对象,每个对象有 9 个属性)传递,并将 Y 作为 70X1 矩阵传递。我的每个 Y 值都是 2 或 4。但是,在形成的决策树中,它为某些叶节点提供了 2.5 或 3.5 的值。
任何想法为什么会导致这种情况?
您在回归模式(这是默认模式)下使用 classregtree。将模式更改为分类模式。
下面是一个使用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
现在,如果您的目标类被编码为数字,则返回的预测仍将是字符串元胞数组,因此您必须将它们转换回数字:
%# load dataset
load fisheriris
[species,GN] = grp2idx(species);
%# ...
%# evaluate
cm = confusionmat(species(testIdx),str2double(pred))
acc = sum(diag(cm))./sum(testIdx)
请注意,分类将始终返回字符串,因此我认为您可能错误地使用了该method=regression
选项,该选项执行回归(数字目标)而不是分类(离散目标)