将决策表转换为决策树

Posted

技术标签:

【中文标题】将决策表转换为决策树【英文标题】:Convert Decision Table To Decision Tree 【发布时间】:2015-10-22 13:35:20 【问题描述】:

如何将决策表转换或可视化为决策树图, 有没有解决它的算法,或者可视化它的软件?

例如,我想在下面可视化我的决策表: http://i.stack.imgur.com/Qe2Pw.jpg

【问题讨论】:

【参考方案1】:

不得不说这是一个有趣的问题。

我不知道确切的答案,但我会提出这样的方法:

使用Karnaugh map 将您的决策表转换为最小化布尔函数 把你的函数变成一棵树

让我们简单化一个例子,并假设使用卡诺得到你的功能(a and b) or c or d。你可以把它变成一棵树:

来源:我自己的

【讨论】:

【参考方案2】:

从决策树生成决策表当然更容易,而不是相反。

但在我看来,您可以将决策表转换为数据集。让“疾病”成为类属性并将证据视为简单的二进制实例属性。从中,您可以使用可用的决策树归纳算法之一轻松生成决策树,例如 C4.5。请记住禁用修剪并降低最小对象数参数。

在此过程中,您会丢失一些信息,但准确性会保持不变。看看描述疾病 D04 的两行 - 第二行实际上比第一行更笼统。从这些数据生成的决策树将仅从 E11、12 和 13 属性中识别出上述疾病,因为它足以正确标记实例。

【讨论】:

是的,实际上这是我在使用 DT 算法时的问题,他们应该删除信息增益低的属性,而我需要创建不删除属性的树。 想到的一件事是更改表格中包含多行的标签。例如将 D01 更改为 D01_1 和 D01_2,归纳后,在创建的 DT 中,只需将其更改回 D01。 我已经尝试像你说的那样更改疾病/类别标签,但 DT 仍然删除了疾病 D01 的证据 E01。我使用随机森林算法生成 DT。 证据 E01 完全没有提供识别这些疾病所需的信息,所以我担心常规的 DT 归纳算法会忽略它。此外,对于这种情况,您可能选择了最差的算法 - 随机森林生成的不是一个决策树,而是一个包含许多不同 DT 的集合。它还使用随机属性选择来使森林中的树木多样化,这可能会导致您丢失 E01 属性。尝试使用 ID3 或 C4.5,但请记住禁用预剪枝和后剪枝。【参考方案3】:

我花了几个小时寻找一个好的算法。但我对我的结果很满意。 我的代码现在太脏了,无法粘贴到这里(我可以根据您的要求私下分享),但总体思路如下。

假设您有一个包含一些决策标准和结果的数据集。

    定义树结构(例如 R 中的 data.tree)并创建“Start”根节点。 计算数据集的结果熵。如果熵为零,您就完成了。 使用每个标准,一一作为树节点计算使用此标准创建的所有分支的熵。取所有分支中最小的一个熵。 使用具有最小(最小)熵的标准创建的分支是您的下一个树节点。将它们添加为子节点。 根据第 4 步中找到的决策点/树节点拆分数据并删除使用的标准。 对每个分支重复步骤 2-4,直到所有分支的熵 = 0。 享受您的理想决策树 :)

【讨论】:

你想给我发一封电子邮件到 putraxor@gmail.com

以上是关于将决策表转换为决策树的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 决策树 - 无法将字符串转换为浮点数

scikit-learn:将多输出决策树转换为 CoreML 模型

决策树如何识别给定文本数据集中的特征?

C++ 决策树存储

决策树

Python数据挖掘—分类—决策树