예제 #1
0
def test_complete_2():
    v1 = Rvar.Rvar(1, 2)
    v2 = Rvar.Rvar(2, 2)
    v3 = Rvar.Rvar(3, 2)
    v4 = Rvar.Rvar(4, 3)
    v5 = Rvar.Rvar(5, 2)
        
    d = Factor.Factor([v1])
    d.fill_values([0.6, 0.4])
    i = Factor.Factor([v2])
    i.fill_values([0.7, 0.3]);
    s = Factor.Factor([v3, v2])
    s.fill_values([0.95, 0.05, 0.2, 0.8]);
    g = Factor.Factor([v4, v1, v2])
    g.fill_values([0.3, 0.4, 0.3, 0.05, 0.25, 0.7, 0.9, 0.08, 0.02, 0.5, 0.3, 0.2]);
    l = Factor.Factor([v5, v4])
    l.fill_values([0.1, 0.9, 0.4, 0.6, 0.99, 0.01]);
    
    s = FactorOperations.observe(s, {v3:1}) # we observe high SAT
    
    factors = [i, s, g, l]
    a = d
    for f in factors:
        a = FactorOperations.multiply(a, f)
        print a.variables, a.values.size
    
    rvars = [v1, v3, v4, v5]
    for v in rvars:
        a = FactorOperations.marginalize(a, v)
        print a.variables, a.values.size
    
    assert np.allclose(a.values, [0.12727273, 0.87272727])
예제 #2
0
def test_conditioning():
    evidence = {v[2]:0, v[3]:1}
    assert np.allclose(FactorOperations.observe(f['a'], evidence).values, f['a'].values)
    assert np.allclose(FactorOperations.observe(f['b'], evidence, False).values, [[0.59, 0.22], [0., 0.]])
    assert np.allclose(FactorOperations.observe(f['c'], evidence, False).values, [[0., 0.], [0.61, 0.]])
    assert np.allclose(FactorOperations.observe(f['z'], {v[3]:0}, False).values, [[[0.25, 0.05, 0.15], [0.08, 0., 0.09]], [[0.,0.,0.],[0.,0.,0.]]])
예제 #3
0
def modify_Factor_by_evidence(name, node, ass):
    factor = GN[name]['factor_'+node]
    randvar = GN[name]['var_'+node]
    GN[name]['factor_'+node] = FactorOperations.observe(factor, {randvar:ass})
예제 #4
0
        F.append(f1)
        F.append(f2)
        F.append(f3)
    return [F,v]



[F, v] = geneticNetwork(family_tree, frequency_of_alleles_in_general_population, probability_of_trait_based_on_genotype)
print F
cc = CliqueTree.CliqueTree(F)

for i,e in enumerate(v):
    print i, e
# for fun lets reduce some evidence
cc.factors[2] = FactorOperations.observe(cc.factors[2], {v[17]:0}) # Ira shows pheno
cc.factors[5] = FactorOperations.observe(cc.factors[5], {v[6]:0})  # rene has gen1 F
cc.factors[5] = FactorOperations.observe(cc.factors[5], {v[7]:1})  # rene has gen2 f
cc.factors[1] = FactorOperations.observe(cc.factors[1], {v[5]:0}) # Eva shows pheno

cc.calibrate()
print cc

phenos_nodes = [0,1,2,3,4,5,6]
probs = {}
for i in phenos_nodes:
    belief = cc.beta[i]
    genes = [v1 for v1 in belief.variables if not v1.id.endswith("_p")]
    f = copy.copy(belief)
    print genes
    for g in genes:
예제 #5
0
#msg_10_1 = FactorOperations.marginalize(msg_10_1, msg_10_1.variables[1])
#msg_10_1 = FactorOperations.marginalize(msg_10_1, msg_10_1.variables[1])
#print '---->', msg_10_1.variables

#belief_1 = FactorOperations.multiply(msg_10_1, cc.factors[1], True)

#print belief_1.variables
#sol = FactorOperations.marginalize(belief_1, belief_1.variables[0])

#print 'benito prob of having illnes is now :', sol.values[0]

# COMPUTE ALL EXACT MARGINALS (of showing the sickness for all)
import copy

# for fun lets reduce some evidence
cc.factors[3] = FactorOperations.observe(cc.factors[3], {v[15]:0}) # Ira shows pheno
cc.factors[6] = FactorOperations.observe(cc.factors[6], {v[0]:0})  # rene has gen FF
cc.factors[4] = FactorOperations.observe(cc.factors[4], {v[12]:1}) # James has gen Ff
cc.calibrate()

phenos_nodes = [0,1,2,3,4,5,6,7,8]
probs = {}
for i in phenos_nodes:
	belief = cc.beta[i]
	genes = [v for v in belief.variables if not v.id.endswith("_p")]
	f = copy.copy(belief)
	f = FactorOperations.marginalize(f, genes[0])
	probs[f.variables[0].id] = f.values[0]
print probs