我有一个‘文本’格式的决策树输出,这是非常难以阅读和解释。在树/节点/叶之后有大量的管道和缩进。我想知道有没有工具可以让我像下面这样输入决策树,然后得到像Weka,Python,...etc这样的树形图?
由于我的决策树非常大,下面是示例/部分决策,以给出我的文本决策树的概念。非常感谢!
"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:发布于 2018-09-21 18:10:17
我不知道有什么工具可以解释这种格式,所以我认为您必须编写一些代码,要么解释文本格式,要么使用MALLET的Java API中的DecisionTree类检索树结构。
在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的结果输出

https://stackoverflow.com/questions/52393195
复制相似问题