コード例 #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
ファイル: greedy.py プロジェクト: while519/pebl
    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
ファイル: test_prior.py プロジェクト: while519/pebl
 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
ファイル: posterior.py プロジェクト: afcarl/pebl
    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
ファイル: test_prior.py プロジェクト: while519/pebl
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
ファイル: posterior.py プロジェクト: afcarl/pebl
    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
ファイル: test_prior.py プロジェクト: while519/pebl
 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
ファイル: test_prior.py プロジェクト: while519/pebl
 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
ファイル: posterior.py プロジェクト: afcarl/pebl
 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")