Преобразовать дерево решений из текста 2 в визуальный - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть вывод дерева решений в текстовом формате, который очень трудно читать и интерпретировать.Есть тонна труб и отступов, чтобы следовать за деревом / узлами / листом.Мне было интересно, есть ли инструменты, где я мог бы использовать дерево решений, как показано ниже, и получить древовидную диаграмму, как 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 голосов
/ 21 сентября 2018

Мне не известен ни один инструмент для интерпретации этого формата, поэтому я думаю, что вам придется что-то написать, либо для интерпретации текстового формата, либо для получения древовидной структуры с использованием класса DecisionTree в MALLET 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

...