【问题标题】:Matlab : decision tree shows invalid output valuesMatlab:决策树显示无效的输出值
【发布时间】:2011-10-20 04:52:15
【问题描述】:

我正在使用 classregtree(X,Y) 函数制作决策树。我将 X 作为大小为 70X9 的矩阵(70 个数据对象,每个对象有 9 个属性)传递,并将 Y 作为 70X1 矩阵传递。我的每个 Y 值都是 2 或 4。但是,在形成的决策树中,它为某些叶节点提供了 2.5 或 3.5 的值。

任何想法为什么会导致这种情况?

【问题讨论】:

  • 另外,当我们讨论这个话题时,classregtree 如何处理缺失的属性?我的数据集中有一些属性缺失的对象,我不知道 matlab 使用哪种方法来处理这个问题。它会删除这些对象吗?对它们进行插值?使用代理拆分?
  • 使用NaN 表示缺失值。 CLASSREGTREE 有一个选项surrogate 来处理训练阶段的缺失值。只需参考相关函数的文档...您始终可以通过用均值/众数替换缺失值来预处理数据,或执行任何其他插补技术
  • 在我的数据中,我将 NaN 用于缺失值。我没有向 classregtree 提供有关如何处理丢失数据的其他信息。那么 classregtree 处理 NaN 值的默认方法是什么?

标签: matlab machine-learning decision-tree


【解决方案1】:

您在回归模式(这是默认模式)下使用 classregtree。 将模式更改为分类模式。

【讨论】:

    【解决方案2】:

    这里是一个使用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 选项,它执行regression(数字目标)而不是classification(离散目标)

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 2020-04-06
      • 2010-12-29
      • 2012-12-02
      • 2017-06-05
      • 2013-06-03
      • 2021-05-27
      • 2019-12-26
      • 2017-07-26
      相关资源
      最近更新 更多