从文本2可视化转换决策树

时间:2018-09-18 19:12:48

标签: python weka decision-tree mallet

我有一个以“文本”格式输出的决策树,很难阅读和解释。沿树/节点/叶有大量的管道和压痕。我想知道是否有工具可以像下面那样输入决策树并获得像Weka,Python等的树形图?

由于我的决策树很大,因此下面是示例/部分决策,以给出我的文本决策树的概念。谢谢你!

"bio" <= 0.5:
|    "ml" <= 0.5:
|    |    "algorithm" <= 0.5:
|    |    |    "bioscience" <= 0.5:
|    |    |    |    "microbial" <= 0.5:
|    |    |    |    |    "assembly" <= 0.5:
|    |    |    |    |    |    "nano-tech" <= 0.5:
|    |    |    |    |    |    |    "smith" <= 0.5:
|    |    |    |    |    |    |    |    "neurons" <= 0.5:
|    |    |    |    |    |    |    |    |    "process" <= 1.5:
|    |    |    |    |    |    |    |    |    |    "program" <= 1.5:
|    |    |    |    |    |    |    |    |    |    |    "mammal" <= 1.0:
|    |    |    |    |    |    |    |    |    |    |    |    "lab" <= 0.5:
|    |    |    |    |    |    |    |    |    |    |    |    |    "human-machine" <= 1.5:
|    |    |    |    |    |    |    |    |    |    |    |    |    |    "tech" <= 0.5:
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |    "smith" <= 0.5:

1 个答案:

答案 0 :(得分:0)

我不知道有什么工具可以解释这种格式,所以我认为您将不得不编写一些东西,要么解释文本格式,要么使用MALLET中的DecisionTree类检索树结构。 Java API

用Python解释文本应该不太困难:例如,如果

line = '|    |    |    |    |    "assembly" <= 0.5:'

然后您可以通过以下方式获取缩进级别,预测变量名称和分割点

parts = line.split('"')
indent = parts[0].count('|    ')
predictor = parts[1]
splitpoint = float(parts[2][-1-parts[2].rfind(' '):-1])

要创建图形输出,我将使用GraphViz。它有Python APIs,但以基于文本的dot格式构建文件并使用dot命令从中创建图形非常简单。例如,一棵简单树的文件可能看起来像

digraph MyTree {
Node_1 [label="Predictor1"]
Node_1 -> Node_2 [label="< 0.335"]
Node_1 -> Node_3 [label=">= 0.335"]
Node_2 [label="Predictor2"]
Node_2 -> Node_4 [label="< 1.42"]
Node_2 -> Node_5 [label=">= 1.42"]
Node_3 [label="Class1
(p=0.897, n=26)", shape=box,style=filled,color=lightgray]
Node_4 [label="Class2
(p=0.993, n=17)", shape=box,style=filled,color=lightgray]
Node_5 [label="Class3
(p=0.762, n=33)", shape=box,style=filled,color=lightgray]
}

以及dot

的结果输出

graphviz tree output