forked from Enrique-Val/ProbExplainer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.py
More file actions
107 lines (91 loc) · 4.38 KB
/
script.py
File metadata and controls
107 lines (91 loc) · 4.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
from probExplainer.model import BayesianNetwork
from probExplainer.algorithms.utils import *
from probExplainer.algorithms import defeater
import pyAgrum as gum
import pandas as pd
#import pyAgrum.lib.notebook as gnb
#This python library will be use to transform the graph into data that d3.js will be able to use
import networkx as nx
import json
from networkx.readwrite import json_graph
if __name__ == '__main__':
'''
bn = gum.loadBN("insurance.bif")
ev_vars = {'RiskAversion': "Psychopath", "VehicleYear": "Older"}
hyp_vars = ["Accident", "Age", "ILiCost"]
my_adapter = BayesianNetwork.BayesianNetworkPyAgrum(bn)
posterior = my_adapter.compute_posterior(ev_vars, hyp_vars)
target = my_adapter.argmax(posterior, hyp_vars)[0]
ev_vars = {'RiskAversion': "Psychopath", "ILiCost": "Thousand"}
hyp_vars = ["Age"]
#print(algorithms.check_every_r_silja(my_adapter, ev_vars, hyp_vars, depth=2))
#print(my_adapter.maximum_a_posteriori(ev_vars, hyp_vars))
#print("MAPI", my_adapter.map_independence(['MedCost', 'ThisCarDam'], ev_vars, {"Age": "Adult"}))
bn_1 = gum.loadBN("expert_networks/network_2.bif")
#gnb.flow.add(gnb.getBN(bn_1, size="20"))
#gnb.flow.display()
'''
# Prepare experiments
N_EXPERTS = 2
#bn_i = gum.loadBN("expert_networks/network_5.bif")
bn_i = gum.loadBN("/var/www/html/CIGModels/backend/cigmodelsdjango/cigmodelsdjangoapp/ProbExplainer/expert_networks/network_5.bif")
my_adapter = BayesianNetwork.BayesianNetworkPyAgrum(bn_i)
marginal_f5 = {i[0] : 0 for i in my_adapter.get_domain_of(["F5"])}
ev_vars = {}#{"F1": "intralaminar"}
target = ["F5"]
print(my_adapter.get_variables())
var_powerset = powerset([i for i in my_adapter.get_variables() if i not in target and i not in ev_vars.keys()])
var_powerset.pop(0)
map = my_adapter.maximum_a_posteriori(evidence=ev_vars, target=target)
print(map)
## EXPERIMENT 1. COUNT OF RELEVANT SETS
relevance_count = {i : 0 for i in var_powerset}
for i in range(N_EXPERTS) :
print("Expert: ",i+1)
#bn_i = gum.loadBN("expert_networks/network_"+str(i+1)+".bif")
bn_i = gum.loadBN("/var/www/html/CIGModels/backend/cigmodelsdjango/cigmodelsdjangoapp/ProbExplainer/expert_networks/network_"+str(i+1)+".bif")
my_adapter = BayesianNetwork.BayesianNetworkPyAgrum(bn_i)
map = my_adapter.maximum_a_posteriori(evidence=ev_vars, target=target)
print(map)
marginal_f5[map[0]["F5"]] = marginal_f5[map[0]["F5"]] + 1
relevant_vars = defeater.get_defeaters(my_adapter, ev_vars, target)[0]
print("Relevant variables: ", relevant_vars)
for j in relevance_count.keys() :
for k in relevant_vars :
if set(k).issubset(set(j)) :
relevance_count[j] = relevance_count[j] + 1
break
print()
# EXPERIMENT 2: COMPUTATION OF MAPI-STRENGTH FOR EACH SUBSET
relevances = pd.DataFrame(columns=var_powerset, index=list(range(N_EXPERTS)), dtype=float)
for i in range(N_EXPERTS):
print("Expert: ", i + 1)
#bn_i = gum.loadBN("expert_networks/network_" + str(i + 1) + ".bif")
bn_i = gum.loadBN("/var/www/html/CIGModels/backend/cigmodelsdjango/cigmodelsdjangoapp/ProbExplainer/expert_networks/network_" + str(i + 1) + ".bif")
my_adapter = BayesianNetwork.BayesianNetworkPyAgrum(bn_i)
map = my_adapter.maximum_a_posteriori(evidence=ev_vars, target=target)
for j in var_powerset:
print(j)
strength_j = 1 - my_adapter.map_independence_strength(ev_vars=ev_vars, map=map[0], set_r=list(j))
print("Relevance strength: ", strength_j)
relevances.loc[i][j] = strength_j
print()
print("F5 count: ", marginal_f5)
print()
print("EXPERIMENT 1 results")
print("Relevance count: ", relevance_count)
print()
print("EXPERIMENT 2 results")
print(relevances.describe())
#Creating and transforming the bn into a graph that can be used by d3.js
G = nx.DiGraph()
# Add nodes and edges to the graph
for node in bn_i.names():
G.add_node(node)
for edge in bn_i.arcs():
G.add_edge(str(edge[0]), str(edge[1]))
# Convert the graph to a JSON format to use with D3.js
data = nx.node_link_data(G)
# Write the data to a JSON file
with open('graph_final.json', 'w') as f:
json.dump(data, f)