Я видел помощь в Matlab, но они представили пример, не объяснив, как использовать параметры в функции classregtree. Любая помощь, чтобы объяснить использование "classregtree" с его параметрами, будет оценена.
Дерево решений в Matlab
Ответ 1
Страница документации функции classregtree не требует пояснений...
Давайте рассмотрим некоторые из наиболее распространенных параметров модели дерева классификации:
- x: матрица данных, строки - это экземпляры, cols предсказывают атрибуты
- y: вектор-столбец, метка класса для каждого экземпляра
- категориальный: укажите, какие атрибуты являются дискретными (в отличие от непрерывных)
- метод: создать дерево классификации или регрессии (зависит от типа класса)
- имена: дает имена атрибутам
- черновик: включить/отключить обрезку с уменьшенной ошибкой
- minparent/minleaf: позволяет указать минимальное количество экземпляров в node, если оно должно быть далее расколото
- nvartosample: используется в случайных деревьях (рассмотрите K случайно выбранных атрибутов на каждом node)
- веса: укажите взвешенные экземпляры
- стоимость: укажите матрицу затрат (штраф за различные ошибки)
- splitcriterion: критерий, используемый для выбора лучшего атрибута для каждого разделения. Я знаком с индексом Джини, который является вариацией критерия "Информационный коэффициент".
- beforeprob: явно указывать предыдущие вероятности класса, а не вычисляться из данных обучения
Полный пример для иллюстрации процесса:
%# load data
load carsmall
%# construct predicting attributes and target class
vars = {'MPG' 'Cylinders' 'Horsepower' 'Model_Year'};
x = [MPG Cylinders Horsepower Model_Year]; %# mixed continous/discrete data
y = cellstr(Origin); %# class labels
%# train classification decision tree
t = classregtree(x, y, 'method','classification', 'names',vars, ...
'categorical',[2 4], 'prune','off');
view(t)
%# test
yPredicted = eval(t, x);
cm = confusionmat(y,yPredicted); %# confusion matrix
N = sum(cm(:));
err = ( N-sum(diag(cm)) ) / N; %# testing error
%# prune tree to avoid overfitting
tt = prune(t, 'level',3);
view(tt)
%# predict a new unseen instance
inst = [33 4 78 NaN];
prediction = eval(tt, inst) %# pred = 'Japan'
Обновление:
Вышеупомянутый класс classregtree
был устаревшим и заменен на ClassificationTree
и RegressionTree
в R2011a (см. fitctree
и fitrtree
, новые в R2014a).
Вот обновленный пример, используя новые функции/классы:
t = fitctree(x, y, 'PredictorNames',vars, ...
'CategoricalPredictors',{'Cylinders', 'Model_Year'}, 'Prune','off');
view(t, 'mode','graph')
y_hat = predict(t, x);
cm = confusionmat(y,y_hat);
tt = prune(t, 'Level',3);
view(tt)
predict(tt, [33 4 78 NaN])