如何将Java输出的WEKA决策树转换为可读ASCII格式?
解决WEKA决策树Dot转ASCII及奇怪字符问题
我来帮你搞定这个问题——那些像N28c97a5的奇怪字符,是WEKA自动生成的节点唯一标识符,而转成你想要的ASCII格式,其实有两种更顺畅的路径,不管你是已经拿到了Dot文件,还是想直接从Java程序里获取结果:
方法一:先清理Dot文件,再转ASCII
如果你已经有了带奇怪字符的Dot文件,分两步操作即可:
移除随机节点标识符
用终端文本处理工具(比如sed)批量清理这些字符,执行这条命令:sed -E 's/N[0-9a-f]{8}//g' your_tree.dot > cleaned_tree.dot它会把所有类似
N28c97a5的随机字符串从Dot文件中移除,得到结构干净的文件。转换为ASCII树形结构
用Graphviz的dot工具直接输出ASCII格式,执行:dot -Tascii cleaned_tree.dot > tree_ascii.txt打开生成的
tree_ascii.txt,就能看到你期望的那种层级分明的文本决策树了。
方法二:直接从Java程序获取ASCII格式(更推荐)
其实完全不用绕Dot格式的弯路,WEKA的决策树模型本身就支持直接输出文本格式的树,能彻底避开奇怪的节点ID。在你的Java代码里,直接调用模型的toString()方法就行:
// 假设你已经训练好RandomTree模型 RandomTree tree = new RandomTree(); tree.buildClassifier(data); // 直接打印符合要求的ASCII格式决策树 System.out.println(tree.toString());
这样输出的结果就是你想要的样式,比如:
RandomTree
attribute_2 < 1759.5
| attribute_2 < 1638.5
| | attribute_3 < 1656.5
| | | attribute_0 < 2027.5 : A (6/0)
| | | attribute_0 >= 2027.5 : B (3/0)
...
这种方式省去了转Dot和清理字符的步骤,直接就能拿到可读性极强的文本树结构。
内容的提问来源于stack exchange,提问作者Haya Raed
相关产品推荐
相关产品推荐

