Pathologically Eclectic Rubbish Lister PerlMonks

### XML probabilistic trees

 on Mar 23, 2003 at 11:14 UTC Need Help??

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Can anyone advise me on the best way to train probabilistic trees using Perl and XML? Are there modules that can make my life easier?

Replies are listed 'Best First'.
Re: XML probabilistic trees
by dakkar (Hermit) on Mar 23, 2003 at 12:15 UTC

Trees? Last time I studied AI we used probabilistic networks, AKA belief networks. That is, a node for each random variable, an edge for each non-indipendent pair of nodes, and a table of joined probability distribution for each edge.

Or, you may be talking about decision trees with stochastic discriminators...

In both cases, I'd use a standard algorithm on an in-memory representation, and then (when needed) serialize that representation as XML on filesystem or database.

```--
dakkar - Mobilis in mobile
```
Re: XML probabilistic trees (what's that)
by Aristotle (Chancellor) on Mar 23, 2003 at 12:04 UTC

I wouldn't bet a lot on someone here knowing what you mean by "training probabilistic trees". Can you be more verbose about what kind probabilistic tree that is and what you're trying to train?

At any rate, for any of your XML processing needs, XML::Twig is always worth a look.

Makeshifts last the longest.

Maybe 'probabilistic network' is the correct term. However, I am dealing with a set of fixed nodes where each node has only one parent node (except the root node).

So, you've got something like:

```%nodes=( root => { parents => [],
probs => [0.01]}, # P(root)
some => { parents => ['n1'],
probs => [0.74,0.21]}, # P(some|!root), P(some|root
+)
other =>{ parents => ['root','n1'],
probs => [0.12,0.24,   # P(other|!root,!some), P(ot
+her|!root,some)
0.81,0.18]}, # P(other|root,!some), P(oth
+er|root,some)
);

I choose an array to represent the join probabilities because I thought it would be the easiest way. You get the entry you need with something like:

```# the state you start from
%state=(root=>1,some=>0);
# let's get P(other|root,!some)
\$i=0;
for @{\$nodes{other}{parents}} {
\$i=(\$i<<2)+\$state{\$_} # this is a simple encoding. Just use the same
+for updating and accessing
}
\$prob=\$nodes{other}{probs}[\$i];

When you have trained your network, you can dump it using XML::Simple:

```use XML::Simple;
print XMLout(\%nodes);

I think this code should work as well with full-fledged belief networks, since I'm using names to refer to nodes, instead of nesting their representation in the XML tree.

```--
dakkar - Mobilis in mobile
```

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://245262]
Approved by Aristotle
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2022-06-26 17:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?