Matlab: дерево решений показывает недопустимые выходные значения - PullRequest
1 голос
/ 04 августа 2011

Я принимаю дерево решений, используя функцию classregtree (X, Y). Я передаю X как матрицу размера 70X9 (70 объектов данных, каждый из которых имеет 9 атрибутов), а Y как матрицу 70X1. Каждое из моих значений Y равно 2 или 4. Однако в сформированном дереве решений он дает значения 2,5 или 3,5 для некоторых конечных узлов.

Есть идеи, почему это может быть вызвано?

Ответы [ 2 ]

3 голосов
/ 08 августа 2011

Вы используете classregtree в режиме регрессии (это режим по умолчанию). Измените режим на режим классификации.

1 голос
/ 05 августа 2011

Вот пример использования 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, которая выполняет регрессия (числовая цель), а не классификация (дискретная цель)

...