在 MATLAB 中通过二进制训练数据训练决策树

Posted

技术标签:

【中文标题】在 MATLAB 中通过二进制训练数据训练决策树【英文标题】:Training a Decision Tree in MATLAB over binary train data 【发布时间】:2012-06-02 06:40:54 【问题描述】:

我想在 MATLAB 中为二进制数据训练决策树。这是我使用的数据示例。 traindata [包含 239 个特征的数据数组]

1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 1 1 1 1 0 0 0 1 1 0 ... [till 239]
1 1 1 0 0 0 1 0 0 0 1 0 1 0 1 1 0 0 1 0 0 0 1 0 1 ... [till 239]
....

问题是该数据对应于一个只有是/否选项的表单。表格的结果也是二元的,意思是 patinet 是否患有某种医学疾病!我们使用了分类树,分类器向我们显示了双数。例如,它根据 x137 值是否大于 0.75 来分支第一个节点!由于我们的数据中没有 0.75,并且它没有是/否的含义,我们希望使用最适合我们工作的决策树。对我们来说最好的决策树是基于布尔变量而不是双变量训练的决策树。它还理解数据不是连续的,例如,而不是上面的表示,x137 是yes o no(1 或0)。有人可以帮我弄这个吗?如果布尔决策树不适用,我也很欣赏将我们的数据映射到双变量和特征的解决方案。我目前在 matlab 中使用 clas-s-regtree,其中 作为训练, 作为结果。

【问题讨论】:

【参考方案1】:

借助clas-s-regtree:

t = clas-s-regtree(X,y) 创建一个决策树 t,用于预测响应 y 作为 X 列中预测变量的函数。X 是一个 n×m 预测变量值矩阵。如果 y 是 n 个响应值的向量,则 clas-s-regtree 执行回归。如果 y 是分类变量、字符数组或字符串元胞数组,则 clas-s-regtree 执行分类。

在您的情况下,y 的类型是什么?在您的情况下,clas-s-regtree 似乎正在做回归,但您想要分类。所以,y 应该是一个分类变量。

编辑:要使您的 y 分类,您可以尝试“名义(y)”。

【讨论】:

【参考方案2】:

clas-s-regtree 有一个可选的输入参数categorical。使用此选项,您可以传入一个向量,指示哪些输入变量是分类变量(在您的情况下,此向量将为 1x239,全为 1)。然后,决策树应该包含是/否决策,而不是数字阈值。

【讨论】:

+1 这里是example,它显示了具有连续和离散特征的分类决策树

以上是关于在 MATLAB 中通过二进制训练数据训练决策树的主要内容,如果未能解决你的问题,请参考以下文章

Matlab 机器学习训练、验证、测试分区

机器学习笔记关于MATLAB实现决策树

什么是结构风险?在决策树类相关算法中通常有哪些正则化参数来控制模型的结构风险?解读一下

决策树之剪枝

基于MATLAB的SVM支持向量机的数据分类仿真,包括训练和测试

sklearn 使用 id3 算法训练决策树