# Bajesovski model
from pgmpy.models import BayesianModel
# Conditional Probability Table, funkcije uslovne raspodele tabelarno predstavljena
from pgmpy.factors.discrete import TabularCPD
# Algoritam koji vrši zaključivanje
from pgmpy.inference import VariableElimination
# Kasalj, Temperatura, COVID, Xray
'''
Kasalj Temperatura
\ /
COVID
|
XRAY
'''
'''
K p
NE 0.7
DA 0.3
'''
k_cpd = TabularCPD(variable='Kasalj',
variable_card=2,
values=[[0.7],
[0.3]],
state_names = { 'Kasalj': ['NE', 'DA'] }
)
'''
T p
NISKA 0.8
VISOKA 0.2
'''
t_cpd = TabularCPD(variable='Temperatura',
variable_card=2,
values=[[0.7],
[0.3]],
state_names = { 'Temperatura': ['NISKA', 'VISOKA'] }
)
'''
K=NE K=NE K=DA K=DA
T=NISKA T=VISOKA T=NISKA T=VISOKA
COVID
NE 0.95 0.7 0.65 0.2
DA 0.05 0.3 0.35 0.8
'''
c_cpd = TabularCPD(variable='COVID',
variable_card=2,
values=[[0.95, 0.7, 0.65, 0.2],
[0.05, 0.3, 0.35, 0.8]],
state_names = {
'COVID': ['NE', 'DA'],
'Kasalj': ['NE','DA'],
'Temperatura': ['NISKA', 'VISOKA']
},
evidence=['Kasalj', 'Temperatura'],
evidence_card=[2,2]
)
''' COVID=NE COVID=DA
XRAY
LOS 0.1 0.7
DOBAR 0.9 0.3
'''
x_cpd = TabularCPD(variable='XRAY',
variable_card=2,
values=[[0.1, 0.7],
[0.9, 0.3,]],
state_names = { 'XRAY': ['LOS', 'DOBAR'],
'COVID': ['NE', 'DA']},
evidence=['COVID'],
evidence_card=[2]
)
covid_model = BayesianModel([('Kasalj', 'COVID'), ('Temperatura','COVID'), ('COVID', 'XRAY')])
covid_model.add_cpds(k_cpd, t_cpd, c_cpd, x_cpd)
covid_model.check_model()
inference = VariableElimination(covid_model)
print(inference.query(['XRAY'], evidence={'COVID': 'DA', 'Kasalj': 'NE'}))
print(inference.map_query(['XRAY'], evidence={'COVID': 'DA', 'Kasalj': 'NE'}))
covid_model.get_independencies()
covid_model.local_independencies('XRAY')
covid_model.active_trail_nodes('Kasalj', observed=['XRAY'])