http://qs321.pair.com?node_id=245271


in reply to Re: Re: XML probabilistic trees
in thread XML probabilistic trees

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

Replies are listed 'Best First'.
Re: Re: Re: Re: XML probabilistic trees
by matth (Monk) on Mar 25, 2003 at 10:13 UTC
    Out of interest. Can anyone tell me why, when I print out with the command:
    print XMLout(\%nodes);
    That the hashed array is not printed out, as the XML form, in the order that it is presented within the program. Also. Can anyone please inform me whether it is easy (with an XML Perl module) to retrieve data, that is nested within tags, with reference to the ordered position in which identical and tandem tags are presented.

      Sorry, I think you lost me there...

      Aht do you mean by 'hashed array'? In Perl, a hash is a function from strings to scalars (a dictionary, a map, ...), an array is a function from integers to scalars (some call it a vector)

      If you meant 'why is the order of the hash keys not preserved?', then the answer is: it's not supposed to. In a hash the order is not important, only the correspondance between keys (which can't be repeated) and their associated values is.

      And for getting the values positionally, read the documentation for XML::Simple, there are various options to specify how to treat repeated elements.

      -- 
              dakkar - Mobilis in mobile