Matlab中的决策树

11

我在Matlab的帮助文档中看到了相关内容,但是他们提供的示例并未解释如何使用 'classregtree' 函数的参数。希望能够得到有关如何使用 'classregtree' 及其参数的帮助。

1个回答

34

函数classregtree的文档页面是自说明的...

让我们来看一下分类树模型的一些最常见的参数:

  • x:数据矩阵,行是实例,列是预测属性
  • y:列向量,每个实例的类标签
  • categorical:指定哪些属性是离散类型(而不是连续型)
  • method:是否生成分类或回归树(取决于类别类型)
  • names:为属性命名
  • prune:启用/禁用减少错误剪枝
  • minparent/minleaf:允许指定节点中实例的最小数量,如果要进一步拆分,则需要满足此条件
  • nvartosample:在随机树中使用(在每个节点考虑K个随机选择的属性)
  • weights:指定加权实例
  • cost:指定成本矩阵(各种错误的惩罚)
  • splitcriterion:用于选择每次分裂时最佳属性的标准。我只熟悉基尼指数,它是信息增益准则的一个变体。
  • priorprob:显式指定先验类概率,而不是从训练数据中计算得出

完整的示例以说明该过程:

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

tree


更新:

上述的 classregtree 类已经过时,被 R2011a 中的 ClassificationTreeRegressionTree 类所取代 (请参见在 R2014a 中新增的 fitctreefitrtree 函数)。

以下是使用新函数/类的更新示例:

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])

感谢Amro的详细解释。基本上,我之前遇到的卡顿问题,而且我仍然无法理解的是关于建立树的条件。所谓的条件是指,在Matlab函数中,这些条件(或标准)是如何被纳入树的进程中的?如果您能通过一些小程序或任何您想要解释的方式来解释一下,我将不胜感激。谢谢。 - user238469
4
看起来你正在尝试编写自己的决策树实现。我建议在开始编码之前,先熟悉一下这个主题。此外,看一下我为类似问题提供的另一个解决方案,其中解释了如何使用熵和信息增益作为分裂标准:https://dev59.com/nXI-5IYBdhLWcg3wbXtN#1859910 - Amro
5
此外,你可能会发现 Andrew Moore 的教程列表非常有用:http://www.autonlab.org/tutorials/ (前两个对你很有帮助)。 - Amro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接