In [11]:
from scipy2015_cbnx_demo_code import *
In [12]:
nodes=["a","b","c","d"]
known_ancestral_relations = [("a","b"),("a","c"),("a","d")]
orphan_nodes = ["a"]
In [15]:
G = completeDiGraph(nodes)
c1 = create_path_complete_condition(known_ancestral_relations)
c2 = create_no_input_node_condition(orphan_nodes)
c3 = create_no_self_loops_condition()
graph_set = conditionalSubgraphs(G,[c1,c2,c3])
len(list(graph_set))
In [16]:
""" Use filters! They speed up the process.
"""
G = completeDiGraph(nodes)
f1 = extract_remove_self_loops()
G_filtered = filter_Graph(G,[f1])
c1 = create_path_complete_condition(known_ancestral_relations)
c2 = create_no_input_node_condition(orphan_nodes)
graph_set = conditionalSubgraphs(G_filtered,[c1,c2])
len(list(graph_set))
Out[16]:
In [ ]:
from scipy2015_cbnx_demo_code import *
In [17]:
node_prop_list = [
("rain", {
"state_space":("yes","no"),
"sample_function": "choice",
"parents":[],
"distribution":[.2,.8]
}),
("sprinkler",{
"state_space":("on","off"),
"sample_function": "choice",
"parents":["rain"],
"distribution":{
(("rain","yes"),):[.01,.99],
(("rain","no"),):[.4,.6]}
}),
("grass_wet",{
"state_space":("wet","dry"),
"sample_function": "choice",
"parents":["rain","sprinkler"],
"distribution":{
(("rain","yes"),("sprinkler","on")):[.99,.01],
(("rain","yes"),("sprinkler","off")):[.8,.2],
(("rain","no"),("sprinkler","on")):[.9,.1],
(("rain","no"),("sprinkler","off")):[0,1]}
})
]
In [ ]:
dist_dict = {"choice": np.random.choice}
edge_list = [
("sprinkler","grass_wet"),
("rain","sprinkler"),
("rain","grass_wet")
]
In [ ]:
func_dictionary = dist_dict
k = 10000 # number of samples
G = nx.DiGraph()
G.clear()
G.add_edges_from(edge_list)
G.add_nodes_from(node_prop_list)
bn_sample = sample_from_graph(G,func_dictionary,k)
for key,value in bn_sample.items():
print(str(key) + ": " + str(value),"\n")
In [ ]:
print_prob_est(bn_sample)