Lot of folks, especially those taking probabilistic graphical model class, might have realized the need for a simple tool/software that can quickly generate a directed acyclic graph (DAG) and the associated conditional probability distribution (CPD) tables for each node of the graph. Below is a quick hack that I pulled together using Ruby and AT&T’s GraphViz library to generate a directed acyclic graph along with CPD (as shown below)
There are two aspects of this hack. First is the ruby script that reads a simple input file and generates a graph using dot notation. Next, we use the graphviz library to convert this dot notation output into an actual graph.
Below is a sample input file related to the student example used in the PGM class. There are few things to note about the input file. Each line above “#Edges” represents node label and the possible values (separated by commas). After “#Edges” represents connections between nodes. Make sure the edges use exactly same label as used for nodes.
Course Difficulty, High, Low Intelligence, High, Low Grade, A, B, C SAT Score, High, Low Letter, Yes, No #Edges Course Difficulty -> Grade -> Letter Intelligence -> SAT Score Intelligence -> Grade
>ruby generator.rb data.txt > graph.txt >dot -T png graph.txt > graph.png >open graph.png