Пример #1
0
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
Пример #2
0
    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)
Пример #3
0
 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)
Пример #4
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)
Пример #5
0
    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
Пример #6
0
    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)
Пример #7
0
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
Пример #8
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)
Пример #9
0
 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)
Пример #10
0
 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)
Пример #11
0
 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)])
Пример #12
0
 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]]
     )
Пример #13
0
    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)
Пример #14
0
    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)
Пример #15
0
 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)
Пример #16
0
 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)
Пример #17
0
 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
Пример #18
0
 def setUp(self):
     self.net = network.Network(
         [data.DiscreteVariable(str(i), 3) for i in xrange(6)], [(0, 1),
                                                                 (4, 5),
                                                                 (2, 3)])
Пример #19
0
 def setUp(self):
     self.net = network.Network(
         [data.DiscreteVariable(str(i), 3) for i in xrange(6)],
         "0,1;4,5;2,3")