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.