DDSW

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 1

import numpy as np

from pgmpy.models import BayesianNetworkxdfs


from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination

def create_model(current_prob):
# Definicja modelu sieci Bayesowskiej
model = BayesianNetwork([('Xt', 'Xt+1'), ('Xt+1', 'Zt+1')])

# Definicja rozkładów warunkowych (CPDs) dla Xt


cpd_Xt = TabularCPD(variable='Xt', variable_card=2, values=[[current_prob[0]],
[current_prob[1]]])

# Definicja rozkładów warunkowych (CPDs) dla Xt+1 i Zt+1


cpd_Xt_plus_1 = TabularCPD(variable='Xt+1', variable_card=2,
values=[[0.7, 0.3], [0.3, 0.7]],
evidence=['Xt'], evidence_card=[2])
cpd_Zt_plus_1 = TabularCPD(variable='Zt+1', variable_card=2,
values=[[0.9, 0.2], [0.1, 0.8]],
evidence=['Xt+1'], evidence_card=[2])

# Dodanie CPDs do modelu


model.add_cpds(cpd_Xt, cpd_Xt_plus_1, cpd_Zt_plus_1)

# Weryfikacja modelu
assert model.check_model()

return model

def update_probabilities(current_prob, new_observations):


updated_probabilities = []

for new_observation in new_observations:


# Tworzenie nowego modelu z aktualizowanym CPD dla Xt
model = create_model(current_prob)

# Inferencja
infer = VariableElimination(model)
evidence = {'Zt+1': new_observation}
query = infer.query(variables=['Xt+1'], evidence=evidence)
updated_prob = query.values

# Aktualizacja poprzedniego prawdopodobieństwa na podstawie nowej


obserwacji
current_prob = updated_prob
updated_probabilities.append(current_prob)

return np.array(updated_probabilities)

# Przykładowe użycie funkcji


current_prob = np.array([0.6, 0.4]) # P(Xt|z1:t)
new_observations = [0, 0, 1, 0, 0] # Nowe obserwacje (0 lub 1)

model = create_model(current_prob)
updated_probabilities = update_probabilities(current_prob, new_observations)
print(f"Updated probabilities: {updated_probabilities}")

You might also like