Source code for pgm.helpers.misc

import numpy as np
from .common import Node
from .search import dfs
from ..representation.LinkedListBN import Graph as BNGraph
from ..representation.LinkedListMN import Graph as MNGraph


[docs]class GenerateRandomGraph(object): r""" Generates graph skeleton randomly """ def __init__(self, N, type='BN', skeleton_only=True): r""" N : number of nodes type : ['BN' or 'MN']; Bayesian Network or Markov Network skeleton_only: bool, if no distribution is not generated """ self.N = N self.type = type self.skeleton_only = skeleton_only self.rootNode = 'rootNode' self.current_nodes = [self.rootNode] if self.type == 'BN': self.Graph = BNGraph(self.rootNode) elif self.type == 'MN': self.Graph = MNGraph(self.rootNode) else : raise ValueError("Invalid type argument. Allowed values ['BN', 'MN']") self.create_graph() if not self.skeleton_only: self.generate_distribution()
[docs] def create_graph(self): r""" Creates random bayesian network """ for nidx in range(self.N-1): nnodes = np.random.randint(1, len(self.current_nodes)+1) node_idxs = np.random.randint(0, len(self.current_nodes), nnodes) nodes = np.array(self.current_nodes)[node_idxs] node_name = 'node'+str(nidx + 1) self.Graph.add_node(node_name, nodes) self.current_nodes.append(node_name)
[docs] def generate_distribution(self): r""" Generates random conditional distribution """ for node in self.current_nodes: node = self.Graph.get_node(node) node.values = [0, 1] node.set_distribution() pass