Module Spn
module Spn: sig .. end
SPN library provides data structure and methods for learning
sum-product networks.
Data structures
type data_t = int array array 
type local_schema_t = (int * int) array 
type schema_t = int array 
type spn_node_type = 
| | 
TimesNode | 
| | 
PlusNode | 
| | 
NullNode | 
| | 
LeafNode | 
Different node types in SPNs
type spnode = {
   | 
id : int; | 
   | 
mutable parents : spnode array; | 
   | 
mutable children : spnode array; | 
   | 
mutable params : float array; | 
   | 
mutable nodetype : spn_node_type; | 
   | 
mutable schema : local_schema_t; | 
   | 
mutable data : data_t; | 
   | 
mutable acname : string; | 
   | 
mutable ac_index : int; | 
   | 
mutable final : bool; | 
   | 
mutable infcached : bool; | 
   | 
mutable logpTemp : float array; | 
}
Each node in an SPN is a spnode.
exception HSplitNotPossible
Raised when data clustering is not possible.
exception VSplitNotPossible
Raised when variable clustering is not possible.
exception NodeTypeError
val node_array : spnode array Pervasives.ref
Stores the nodes of an SPN network.
Operations
val create_node : spn_node_type ->
       spnode array ->
       spnode array ->
       float array -> data_t -> local_schema_t -> spnode
create_node t pt c pm d s creates a new spn node and adds it to
    
Spn.node_array. 
t is the node type, 
pt is the list of parents, 
c
    is the children list, 
pm is the list of parameters, 
d is data, and
    
s is the schema.
 
val create_plus : data_t -> local_schema_t -> spnode
Creates a plus node for the given data and schema.
val create_times : data_t -> local_schema_t -> spnode
Creates a times node for the given data and schema.
val create_leaf : data_t -> local_schema_t -> spnode
Creates a leaf node for the given data and schema.
val create_null : unit -> spnode
Creates a dummy node.
val get_type_name : spn_node_type -> string
Returns a string value corresponding to the node type.
val get_node_by_id : int -> spnode
Returns an spnode with the given id from node_array.
val get_spn_size : unit -> int
Returns the size of an SPN network (the lengths of node_array)
val add_child : spnode -> spnode -> unit
Adds a child to the node and updates the parameters based on the
    number of samples in the child node.
val set_parent : spnode -> spnode -> unit
Sets the parent of a node, and also updates the children of the
    parent node.
val print_node : Pervasives.out_channel -> spnode -> unit
Writes the information of a single SPN node into an output file.
val print_model : Pervasives.out_channel -> spnode -> unit
Writes the SPN structure into the output file
val print_spn : spnode -> unit
Prints SPN information. Used for dubugging.
val load_model : string -> unit
Constructs a SPN structure given the model file
val h_split : spnode -> int -> float -> int -> float -> spnode list
h_split node num_part lambda concurrent_thr ratio learns a sum
    node using sample clustering for conditional distributions. num_part
    is the maximum number of clusters. lambda is a penalty for the
    number of clusters. concurrent_thr determined the number of
    concurrent processes for clustering. ratio is no longer in use.
Raises HSplitNotPossible if the number of found clusters is one.
val h_split_force : spnode -> int -> float -> int -> float -> spnode list
Similar to h_split, but never raises HSplitNotPossible, so it
    always find a split. (Useful for the spnlearn algorithm.)
val v_split : spnode -> float -> spnode list
v_split node cut_thr learns a product node using variable
    clustering. node is a spnode to split. We suppose that there is no
    edge between two nodes if the mutual information of the nodes is less
    than cut_thr.
val v_split_gtest : spnode -> float -> spnode list
v_split_gtest node cut_thr learns a product node using variable
    clustering. node is a spnode to split. It suppose no edge between
    two nodes if g-test is less than cut_thr.