Sleipnir
Public Member Functions
Sleipnir::CBayesNetFN Class Reference

Implements IBayesNet for networks using custom node types. More...

#include <bayesnet.h>

Inheritance diagram for Sleipnir::CBayesNetFN:
Sleipnir::CBayesNetFNImpl Sleipnir::IBayesNet

Public Member Functions

bool Open (const char *szFile)
 Load a Bayes net from a file.
bool Save (const char *szFile) const
 Save a Bayes net to a file.
bool Learn (const IDataset *pDataset, size_t iIterations, bool fZero=false, bool fELR=false)
 Learn conditional probabilities from data using Expectation Maximization, naive Bayesian learning, or Extended Logistic Regression.
bool Evaluate (const std::vector< unsigned char > &vecbDatum, std::vector< float > &vecdResults, bool fZero=false, size_t iNode=0, bool fIgnoreMissing=false) const
 Perform Bayesian inference to obtain probabilities given values for each other Bayes net node.
void GetNodes (std::vector< std::string > &vecstrNodes) const
 Retrieve the string IDs of all nodes in the Bayes net.
unsigned char GetValues (size_t iNode) const
 Returns the number of different values taken by the requested node.
bool IsContinuous () const
 Returns true if any node in the Bayes net is non-discrete (e.g. Gaussian, etc.)
bool Evaluate (const IDataset *pDataset, std::vector< std::vector< float > > &vecvecdResults, bool fZero) const
 Perform Bayesian inference to obtain probabilities for each element of a dataset.
bool Evaluate (const IDataset *pDataset, CDat &DatResults, bool fZero) const
 Perform Bayesian inference to obtain probabilities for each element of a dataset.
bool IsContinuous (size_t iNode) const
 Returns true if the requested node is non-discrete (e.g. Gaussian, etc.)
void Randomize ()
 Randomizes every parameter in the Bayes net.
void Randomize (size_t iNode)
 Randomizes every parameter the requested node.
void Reverse (size_t iNode)
 Reverses the parameters of the requested node over its possible values.
bool GetCPT (size_t iNode, CDataMatrix &MatCPT) const
 Retrieves the parameters of the requested Bayes net node.
bool Evaluate (const CPCLPair &PCLData, CPCL &PCLResults, bool fZero, int iAlgorithm) const
 Perform Bayesian inference to obtain probabilities over all nodes in the network given some amount of data.

Detailed Description

Implements IBayesNet for networks using custom node types.

CBayesNetFN can be used to construct Bayes nets using arbitrary node types. These are usually only theoretically sound in a naive structure, but in such a case, any node type can be used for which parameters can be estimated from data: discrete, Gaussian, Beta, Exponential, etc. These networks are stored using a SMILE network in a DSL/XDSL file, but the semantics of each node's parameters are dependent on the node type.

Remarks:
Node types are stored in the properties for each node (accessible through the "User Properties" pane in GeNIe). To determine node type, CBayesNetFN checks the "type" property of each node; if no such property is available, the node is a standard discrete distribution (can also be given the value "discrete"). Other allowable values include "gaussian", "beta", "exponential", and "mog".
See also:
CBayesNetFNNode

Definition at line 149 of file bayesnet.h.


Member Function Documentation

bool Sleipnir::CBayesNetFN::Evaluate ( const std::vector< unsigned char > &  vecbDatum,
std::vector< float > &  vecdResults,
bool  fZero = false,
size_t  iNode = 0,
bool  fIgnoreMissing = false 
) const [virtual]

Perform Bayesian inference to obtain probabilities given values for each other Bayes net node.

Parameters:
vecbDatumOne-indexed values for each node in the Bayes net (zero indicates missing data).
vecdResultsInferred probabilities for each possible value of the requested node.
fZeroIf true, assume all missing values are zero (i.e. the first bin).
iNodeThe node for which output probabilities are inferred.
fIgnoreMissingIf true, do not default missing values to zero or any other value.
Returns:
True if evaluation was successful.

This Evaluate assumes a discrete Bayes net and, given a vector of evidence values for each node, infers the probability distribution over possible values of the requested node. Note that vecbDatum contains one plus the discrete bin value of each node, and a value of zero indicates missing data for the corresponding node.

Remarks:
vecbDatum should contain one plus the discrete bin value of each node, and a value of zero indicates missing data for the corresponding node. If the requested output node can take N values, the output vector will contain only the first N-1 probabilities, since the Nth can be calculated to sum to one.

Implements Sleipnir::IBayesNet.

Definition at line 604 of file bayesnetfn.cpp.

References Sleipnir::CMeta::GetNaN().

Referenced by Evaluate().

bool Sleipnir::CBayesNetFN::Evaluate ( const IDataset pDataset,
std::vector< std::vector< float > > &  vecvecdResults,
bool  fZero 
) const [inline, virtual]

Perform Bayesian inference to obtain probabilities for each element of a dataset.

Parameters:
pDatasetDataset to be used as input for inference.
vecvecdResultsVector of output probabilities; each element of the outer vector represents the result for one gene pair, and each element of the inner vectors represents the probability for one possible value from the output node (i.e. the answer).
fZeroIf true, assume all missing values are zero (i.e. the first bin).
Returns:
True if evaluation was successful.

The inverse of the corresponding IBayesNet::Learn method; given an IDataset, ignore the first (gold standard) dataset and infer the corresponding output probabilities for each other gene pair for which data is available. For each gene pair within the IDataset for which IDataset::IsExample is true, vecvecdResults will contain one vector. This vector will contain inferred probabilities for each possible value of the output node, generally the probability of functional unrelatedness (i.e. one minus the probability of functional relationship).

Remarks:
The order of datasets in the given IDataset must correspond to the order of nodes within the Bayes network, and the first dataset (index 0) is assumed to be a gold standard (and is thus ignored). Only data for which IDataset::IsExample is true will be used, which usually means that at least one other dataset must have a value. If the output node can take N values, each output vector will contain only the first N-1 probabilities, since the Nth can be calculated to sum to one.

Implements Sleipnir::IBayesNet.

Definition at line 160 of file bayesnet.h.

References Evaluate().

bool Sleipnir::CBayesNetFN::Evaluate ( const IDataset pDataset,
CDat DatResults,
bool  fZero 
) const [inline, virtual]

Perform Bayesian inference to obtain probabilities for each element of a dataset.

Parameters:
pDatasetDataset to be used as input for inference.
DatResultsDescription of parameter DatResults.
fZeroIf true, assume all missing values are zero (i.e. the first bin).
Returns:
True if evaluation was successful.

The inverse of the corresponding IBayesNet::Learn method; given an IDataset, ignore the first (gold standard) dataset and infer the corresponding output probability for each other gene pair for which data is available. For each gene pair within the IDataset for which IDataset::IsExample is true, the probability of functional relationship (i.e. the largest possible value of the output node) will be placed in the given CDat.

Remarks:
The order of datasets in the given IDataset must correspond to the order of nodes within the Bayes network, and the first dataset (index 0) is assumed to be a gold standard (and is thus ignored). Only data for which IDataset::IsExample is true will be used, which usually means that at least one other dataset must have a value.

Implements Sleipnir::IBayesNet.

Definition at line 165 of file bayesnet.h.

References Evaluate().

bool Sleipnir::CBayesNetFN::Evaluate ( const CPCLPair PCLData,
CPCL PCLResults,
bool  fZero,
int  iAlgorithm 
) const [inline, virtual]

Perform Bayesian inference to obtain probabilities over all nodes in the network given some amount of data.

Parameters:
PCLDataInput data; each column (experiment) is mapped by label to a node in the Bayes net, and PCL entries correspond to observed (or missing) data values.
PCLResultsOutput probabilities; each column (experiment) is mapped to a node:value pair from the Bayes net, and PCL entries correspond to the probability of that value in that node.
fZeroIf true, assume all missing values are zero (i.e. the first bin).
iAlgorithmImplementation-specific ID of the Bayesian inference algorithm to use.
Returns:
True if evaluation was successful.

This version of Evaluate will perform one Bayesian inference for each row (gene) of the given PCLData. Here, each PCL "experiment" column corresponds to a node in the Bayes net as identified by the experiment labels in the PCL and the IDs of the Bayes net nodes. Values are read from the given PCL and (if present; missing values are allowed) discretized into Bayes net value bins using the accompanying quantization information. For each input row, all given non-missing values are observed for the appropriate Bayes net nodes, and Bayesian inference is used to provide probabilities for each remaining, unobserved node value.

Remarks:
PCLResults must be initialized with the correct number of experimental columns before calling Evaluate; that is, the total number of node values in the Bayes net. For example, if the Bayes net has three nodes A, B, and C, node A can take two values 0 and 1, and nodes B and C can take values 0, 1, and 2, then PCLResults must have 8 experimental columns corresponding to A:0, A:1, B:0, B:1, B:2, C:0, C:1, and C:2. Columns of PCLData are mapped to Bayes net nodes by experiment and node labels; experiment labels not corresponding to any Bayes net node ID are ignored, and Bayes net nodes with no corresponding experiment are assumed to be unobserved (hidden). Only the genes in PCLResults are used, and they need not be in the same order as in PCLData.

Implements Sleipnir::IBayesNet.

Definition at line 191 of file bayesnet.h.

bool Sleipnir::CBayesNetFN::GetCPT ( size_t  iNode,
CDataMatrix MatCPT 
) const [inline, virtual]

Retrieves the parameters of the requested Bayes net node.

Parameters:
iNodeIndex of node for which parameters should be retrieved.
MatCPTParameters of the requested node in tabular form; the columns of the matrix represent parental values, the rows node values.
Returns:
True if parameter retrieval succeeded, false if it failed or the requested node has more than one parent.

Retrieves node parameters in an implementation-specific manner, often only allowing nodes with at most one parent. For discrete nodes, matrix entries are generally conditional probabilities. For continuous nodes, matrix entries may represent distribution parameters such as Gaussian mean and standard deviation.

Remarks:
Only allowed for nodes with at most one parent; nodes with more parents are supported by some implementations, but their parameters can't be retrieved by this function.

Implements Sleipnir::IBayesNet.

Definition at line 187 of file bayesnet.h.

void Sleipnir::CBayesNetFN::GetNodes ( std::vector< std::string > &  vecstrNodes) const [virtual]

Retrieve the string IDs of all nodes in the Bayes net.

Parameters:
vecstrNodesOutput containing the IDs of all nodes in the Bayes net.

Implements Sleipnir::IBayesNet.

Definition at line 641 of file bayesnetfn.cpp.

unsigned char Sleipnir::CBayesNetFN::GetValues ( size_t  iNode) const [virtual]

Returns the number of different values taken by the requested node.

Parameters:
iNodeBayes net node for which values should be returned.
Returns:
Number of different values taken by the requested node.
Remarks:
Not applicable for continuous nodes.

Implements Sleipnir::IBayesNet.

Definition at line 647 of file bayesnetfn.cpp.

bool Sleipnir::CBayesNetFN::IsContinuous ( ) const [virtual]

Returns true if any node in the Bayes net is non-discrete (e.g. Gaussian, etc.)

Returns:
True if any node in the Bayes net is continuous.

Implements Sleipnir::IBayesNet.

Definition at line 653 of file bayesnetfn.cpp.

bool Sleipnir::CBayesNetFN::IsContinuous ( size_t  iNode) const [inline, virtual]

Returns true if the requested node is non-discrete (e.g. Gaussian, etc.)

Parameters:
iNodeNode to be inspected.
Returns:
True if the requested node is continuous.

Implements Sleipnir::IBayesNet.

Definition at line 169 of file bayesnet.h.

bool Sleipnir::CBayesNetFN::Learn ( const IDataset pDataset,
size_t  iIterations,
bool  fZero = false,
bool  fELR = false 
) [virtual]

Learn conditional probabilities from data using Expectation Maximization, naive Bayesian learning, or Extended Logistic Regression.

Parameters:
pDatasetDataset to be used for learning.
iIterationsMaximum number of iterations for EM or ELR.
fZeroIf true, assume all missing values are zero (i.e. the first bin).
fELRIf true, use ELR to learn network parameters.
Returns:
True if parameters were learned successfully.

Using the given IDataset, learn parameters for the underlying Bayes network. If requested, learning is performed discriminatively using Extended Logistic Regression due to Greiner, Zhou, et al. Otherwise, maximum likelihood estimates are used for naive structures, and Expectation Maximization is used for other network structures.

Remarks:
The order of datasets in the given IDataset must correspond to the order of nodes within the Bayes network, and the first dataset (index 0) is assumed to be a gold standard. Only data for which IDataset::IsExample is true will be used, which usually means that the first dataset and at least one other dataset must have a value.

Implements Sleipnir::IBayesNet.

Definition at line 481 of file bayesnetfn.cpp.

References Sleipnir::IDataset::GetDiscrete(), Sleipnir::IDataset::GetGenes(), and Sleipnir::IDataset::IsExample().

bool Sleipnir::CBayesNetFN::Open ( const char *  szFile) [virtual]

Load a Bayes net from a file.

Parameters:
szFilePath to file.
Returns:
True if Bayes net was loaded succesfully.
Remarks:
Specific behavior is implementation specific; it is assumed that the network will be completely reinitialized from the given file, although it may be left in an inconsistent state if the return value is false.

Implements Sleipnir::IBayesNet.

Definition at line 454 of file bayesnetfn.cpp.

void Sleipnir::CBayesNetFN::Randomize ( ) [inline, virtual]

Randomizes every parameter in the Bayes net.

Remarks:
Parameter values are generated uniformly at random and normalized to represent a valid probability distribution.

Implements Sleipnir::IBayesNet.

Definition at line 173 of file bayesnet.h.

void Sleipnir::CBayesNetFN::Randomize ( size_t  iNode) [inline, virtual]

Randomizes every parameter the requested node.

Parameters:
iNodeIndex of node to be randomized.
Remarks:
Parameter values are generated uniformly at random and normalized to represent a valid probability distribution.

Implements Sleipnir::IBayesNet.

Definition at line 179 of file bayesnet.h.

void Sleipnir::CBayesNetFN::Reverse ( size_t  iNode) [inline, virtual]

Reverses the parameters of the requested node over its possible values.

Parameters:
iNodeIndex of node to be reversed.

"Vertically" reverses the parameters of the requested node. That is, if the requested node can take values 0 through 3, then for each setting of the parents' values, Pnew(0|parents) = Pold(3|parents), Pnew(1|parents) = Pold(2|parents), Pnew(2|parents) = Pold(1|parents), and Pnew(3|parents) = Pold(0|parents).

Remarks:
May be ignored by some implementations, particularly continuously valued nodes.

Implements Sleipnir::IBayesNet.

Definition at line 183 of file bayesnet.h.

bool Sleipnir::CBayesNetFN::Save ( const char *  szFile) const [virtual]

Save a Bayes net to a file.

Parameters:
szFilePath to file.
Returns:
True if Bayes net was saved succesfully.
Remarks:
Specific behavior is implementation specific; the Bayes net will not be modified, but the contents of the output file may be inconsistent if the return value is false.

Implements Sleipnir::IBayesNet.

Definition at line 469 of file bayesnetfn.cpp.


The documentation for this class was generated from the following files: