我有一个以“文本”格式输出的决策树,很难阅读和解释。沿树/节点/叶有大量的管道和压痕。我想知道是否有工具可以像下面那样输入决策树并获得像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:
答案 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