【问题标题】:Decision Tree in MatlabMatlab中的决策树
【发布时间】:2010-12-29 22:43:21
【问题描述】:

我在 Matlab 中看到了帮助,但他们提供了一个示例,但没有解释如何使用 'classregtree' 函数中的参数。任何帮助解释“classregtree”及其参数的使用将不胜感激。

【问题讨论】:

    标签: matlab machine-learning decision-tree


    【解决方案1】:

    函数classregtree的文档页面不言自明...

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

    • x:数据矩阵,行是实例,列是预测属性
    • y:列向量,每个实例的类标签
    • 分类:指定哪些属性是离散类型(相对于连续)
    • 方法:是生成分类树还是回归树(取决于类类型)
    • names:为属性命名
    • prune:启用/禁用减少错误的修剪
    • minparent/minleaf:如果要进一步拆分,允许指定节点中的最小实例数
    • nvartosample:用于随机树(考虑每个节点上随机选择的 K 个属性)
    • 权重:指定加权实例
    • 成本:指定成本矩阵(各种错误的惩罚)
    • 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'
    


    更新:

    上述 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 函数中以使树继续进行?如果您能通过一些小程序解释这一点,或者无论如何您想解释,我将不胜感激。谢谢。
    • 您似乎正在尝试编写自己的决策树实现。我建议您在开始编码之前先熟悉该主题。除此之外,看看我对类似问题的另一个解决方案,它解释了如何使用熵和信息增益作为分割标准:stackoverflow.com/questions/1859554/…
    • 另外,您可能会发现 Andrew Moore 的教程列表非常有用:autonlab.org/tutorials(您对前两个感兴趣)
    猜你喜欢
    • 2018-05-04
    • 2013-06-03
    • 1970-01-01
    • 2019-02-08
    • 2012-10-18
    • 2018-09-16
    • 2013-11-11
    • 2018-03-19
    • 2013-12-01
    相关资源
    最近更新 更多