java – 如何使用graph()或tograph()在WEKA中显示决策树的图形(ascii文本图形)表示

我正在尝试使用我自己的程序中的WEKA类显示由不同类生成的决策树.具体来说,我使用了两个不同的:J48(C4.5实现)和RandomTree.一个具有函数graph(),另一个具有toGraph()函数,它们对于各自的类似乎具有相同的功能.

因为它们都显示java.lang.String作为它们的返回类型,所以我希望看到类似于你在使用它们的Explorer应用程序时看到的内容:

act = STRETCH
|   size = SMALL
|   |   Color = YELLOW
|   |   |   age = ADULT : T (1/0)
|   |   |   age = CHILD : F (1/0)
|   |   Color = PURPLE
|   |   |   age = ADULT : T (2/0)
|   |   |   age = CHILD : F (1/0)
|   size = LARGE
|   |   age = ADULT : T (4/0)
|   |   age = CHILD : F (2/0)
act = DIP : F (8/0)

相反,我得到这样的东西:

digraph Tree {
edge [style=bold]
N13aaa14a [label="1: T"]
N13aaa14a->N268b819f [label="act = STRETCH"]
N268b819f [label="2: T"shape=box]
N13aaa14a->N10eb017e [label="act = DIP"]
N10eb017e [label="3: F"]
N10eb017e->N34aeffdf [label="age = CHILD"]
N34aeffdf [label="4: F"shape=box]
N10eb017e->N4d20a47e [label="age = ADULT"]
N4d20a47e [label="5: T"shape=box]
}

这是WEKA库特有的,还是某种标准Java格式?它看起来类似于我在另一个项目上工作的一些JSON东西,但我从未熟悉它.

有没有一种简单的方法可以编写一个函数来以更易于阅读的格式显示它?

最佳答案 您获得的输出是所谓的“点”格式,旨在由graphviz编译.你会得到比ASCII艺术更好的结果,这是肯定的.

将文件保存在out.dot中,然后尝试以下命令:

$dot -Tpng -oout.png out.dot 

然后看看你在out.png中得到了什么

点赞