def TestScoredNetworkHashing(): # test due to a bug encountered earlier net = network.Network([data.Variable(x) for x in range(5)], "0,1;1,2;4,3") snet = result._ScoredNetwork(net.edges, -10) for i in xrange(1000): if hash(snet) != hash(deepcopy(snet)): assert False
def __init__(self, data_=None, prior_=None, **options): """ Create a learner that uses a greedy learning algorithm. The algorithm works as follows: 1. start with a random network 2. Make a small, local change and rescore network 3. If new network scores better, accept it, otherwise reject. 4. Steps 2-3 are repeated till the restarting_criteria is met, at which point we begin again with a new random network (step 1) Any config param for 'greedy' can be passed in via options. Use just the option part of the parameter name. For more information about greedy learning algorithms, consult: 1. http://en.wikipedia.org/wiki/Greedy_algorithm 2. D. Heckerman. A Tutorial on Learning with Bayesian Networks. Microsoft Technical Report MSR-TR-95-06, 1995. p.35. """ super(GreedyLearner, self).__init__(data_, prior_) self.options = options config.setparams(self, options) if not isinstance(self.seed, network.Network): self.seed = network.Network(self.data.variables, self.seed)
def setUp(self): self.net = network.Network( [data.DiscreteVariable(i,3) for i in xrange(5)], "0,1;3,2;2,4;1,4" ) self.p = prior.UniformPrior(len(self.net.nodes)) self.p2 = prior.UniformPrior(len(self.net.nodes), weight=2.0)
def test_score1(self): self.ne.alter_network(add=[(1, 0), (2, 0), (3, 0)]) self.ne.alter_network(add=[(1, 2)]) assert allclose( self.ne.score_network( network.Network(self.data.variables, "1,0;2,0;3,0")), -15.461087517)
def __getitem__(self, key): """Retrieve a specific network (and score) from the posterior.""" if isinstance(key, slice): return self.__getslice__(self, key.start, key.stop) net = network.Network(self.nodes, self.adjacency_matrices[key]) net.score = self.scores[key] return net
def setUp(self): nodes = [data.Variable(x) for x in range(5)] nets = ("0,1", "1,0" , "1,2;2,3", "4,1;1,2", "4,2;4,3") scores = (-10.5, -11, -8.5, -12, -13) self.result1 = result.LearnerResult(size=0) self.result1.nodes = nodes self.result1.start_run() for n,s in zip(nets, scores): self.result1.add_network(network.Network(nodes, n), s) self.result2 = result.LearnerResult(size=0) self.result2.nodes = nodes self.result2.start_run() self.result2.add_network(network.Network(nodes, "1,2;2,3;3,4"), -6) self.result2.add_network(network.Network(nodes, "1,2;2,3;3,4;0,4;0,2"), -5.5) self.result2.add_network(network.Network(nodes, "0,1"), -10.5)
def test_null_prior(): net = network.Network( [data.DiscreteVariable(i,3) for i in xrange(5)], "0,1;3,2;2,4;1,4" ) p1 = prior.NullPrior() assert p1.loglikelihood(net) == 0.0 net.edges.add((1,4)) assert p1.loglikelihood(net) == 0.0
def consensus_network(self, threshold=.3): """Return a consensus network with the given threshold.""" features = self.consensus_matrix features[features >= threshold] = 1 features[features < threshold] = 0 features = features.astype(bool) return network.Network(self.nodes, features)
def test_alter3(self): self.ne.alter_network(add=[(1, 0), (2, 0), (3, 0)]) assert allclose(self.ne.alter_network(add=[(2, 3)]), -15.0556224089) assert allclose( evaluator.NetworkEvaluator( self.data, network.Network(self.data.variables, "1,0;2,0;3,0;2,3")).score_network(), -15.0556224089)
def setUp(self): nodes = [data.Variable(x) for x in range(5)] self.result = result.LearnerResult(size=self.size) self.result.nodes = nodes self.result.start_run() nets = ("0,1", "1,0" , "1,2;2,3", "4,1;1,2", "4,2;4,3") scores = (-10.5, -11, -8.5, -12, -13) for n,s in zip(nets, scores): self.result.add_network(network.Network(nodes, n), s)
def setUp(self): self.net = network.Network( [data.DiscreteVariable(i,3) for i in xrange(5)], "0,1;1,3;1,2" ) energymat = N.array([[ 0.5, 0. , 0.5, 0.5, 0.5], [ 0.5, 0.5, 0.5, 0.5, 0. ], [ 0.5, 0.5, 0.5, 0.5, 0.5], [ 0.5, 0.5, 0.5, 0.5, 5. ], [ 0.5, 0.5, 0.5, 0.5, 0.5]]) self.p = prior.Prior(len(self.net.nodes), energymat, required_edges=[(1,2)])
def setUp(self): self.net = network.Network( [data.DiscreteVariable(i,3) for i in xrange(5)], "0,1;3,2;2,4;1,4" ) self.p = prior.Prior( len(self.net.nodes), required_edges=[(1,4),(0,1)], prohibited_edges=[(3,4)], constraints=[lambda am: not am[0,4]] )
def __init__(self, data_=None, prior_=None, networks=None): """Create a ListLearner learner. networks should be a list of networks (as network.Network instances). """ super(ListLearner, self).__init__(data_, prior_) self.networks = networks if not networks: variables = self.data.variables _net = lambda netstr: network.Network(variables, netstr) netstrings = config.get('listlearner.networks').splitlines() self.networks = (_net(s) for s in netstrings if s)
def __init__(self, data_=None, prior_=None, **options): """Create a Simulated Aneaaling learner. For more information about Simulated Annealing algorithms, consult: 1. http://en.wikipedia.org/wiki/Simulated_annealing 2. D. Heckerman. A Tutorial on Learning with Bayesian Networks. Microsoft Technical Report MSR-TR-95-06, 1995. p.35-36. Any config param for 'simanneal' can be passed in via options. Use just the option part of the parameter name. """ super(SimulatedAnnealingLearner,self).__init__(data_, prior_) config.setparams(self, options) if not isinstance(self.seed, network.Network): self.seed = network.Network(self.data.variables, self.seed)
def setUp(self): net1 = network.Network([data.Variable(x) for x in range(5)], "0,1") self.sn1 = result._ScoredNetwork(net1.edges, -11.15) net2 = network.Network([data.Variable(x) for x in range(5)], "1,0") self.sn2 = result._ScoredNetwork(net2.edges, -11.15)
def setUp(self): self.net = network.Network( [data.DiscreteVariable(i, 3) for i in xrange(6)]) for edge in [(0, 1), (0, 3), (1, 2)]: self.net.edges.add(edge)
def __iter__(self): """Iterate over the networks in the posterior in sorted order.""" for adjmat, score in zip(self.adjacency_matrices, self.scores): net = network.Network(self.nodes, adjmat) net.score = score yield net
def setUp(self): self.net = network.Network( [data.DiscreteVariable(str(i), 3) for i in xrange(6)], [(0, 1), (4, 5), (2, 3)])
def setUp(self): self.net = network.Network( [data.DiscreteVariable(str(i), 3) for i in xrange(6)], "0,1;4,5;2,3")