Question: import networkx as nx import matplotlib.pyplot as plt from pgmpy . models import BayesianNetwork from pgmpy . factors.discrete import TabularCPD import numpy as np def

import networkx as nx
import matplotlib.pyplot as plt
from pgmpy.models import BayesianNetwork
from pgmpy.factors.discrete import TabularCPD
import numpy as np
def construct_bayesian_network():
# Define Bayesian network structure
bayesian_network = BayesianNetwork([('Rain', 'Maintenance'),('Rain', 'Train'),('Maintenance', 'Train'),('Train', 'Appointment')])
# Define Conditional Probability Distributions
cpd_rain = TabularCPD(variable='Rain', variable_card=3, values=[[0.7],[0.2],[0.1]])
cpd_maintenance = TabularCPD(variable='Maintenance', variable_card=2, values=[[0.4,0.6,0.2,0.8,0.1,0.9],[0.6,0.4,0.8,0.2,0.9,0.1]], evidence=['Rain'], evidence_card=[3])
cpd_train = TabularCPD(variable='Train', variable_card=2, values=[[0.8,0.2,0.9,0.1,0.6,0.4,0.7,0.3,0.4,0.6,0.5,0.5],[0.2,0.8,0.1,0.9,0.4,0.6,0.3,0.7,0.6,0.4,0.5,0.5]], evidence=['Rain', 'Maintenance'], evidence_card=[3,2])
cpd_appointment = TabularCPD(variable='Appointment', variable_card=2, values=[[0.9,0.1],[0.6,0.4]], evidence=['Train'], evidence_card=[2])
# Add CPDs to the network
bayesian_network.add_cpds(cpd_rain, cpd_maintenance, cpd_train, cpd_appointment)
return bayesian_network
def visualize_bayesian_network(bayesian_network):
# Visualize the Bayesian network
nx_bayesian_network = bayesian_network.to_nx()
pos = nx.spring_layout(nx_bayesian_network)
nx.draw(nx_bayesian_network, pos, with_labels=True, arrowsize=20, node_size=3000, node_color="skyblue", font_size=12, font_weight="bold")
plt.title("Bayesian Network")
plt.show()
def inference(bayesian_network, queries):
# Perform inference on the Bayesian network
for query in queries:
query_variable = query[0]
evidence = query[1]
print(f"P({query_variable}|{','.join(evidence.keys())})=", bayesian_network.get_inference().query(variables=[query_variable], evidence=evidence))
def markov_chain_simulation(initial_state, transition_matrix, steps):
# Simulate Markov chain
current_state = initial_state
for _ in range(steps):
current_state = np.dot(current_state, transition_matrix)
return current_state
if __name__=="__main__":
# Question 1: Construct and visualize the Bayesian network
bayesian_network = construct_bayesian_network()
visualize_bayesian_network(bayesian_network)
# Question 2: Perform inferences
queries =[('Rain',{}),('Maintenance',{'Rain': 'heavy'}),('Appointment',{'Rain': 'none', 'Maintenance': 'no'})]
inference(bayesian_network, queries)
# Question 3: Markov chain simulation
initial_state = np.array([1,0])
transition_matrix = np.array([[0.9,0.1],[0.5,0.5]])
steps =10
final_state = markov_chain_simulation(initial_state, transition_matrix, steps)
print(f"Probability distribution of 'attend' and 'miss' ten days later: {final_state}")
currently getting ValueError: values must be of shape (2,3). Got shape: (2,6)
cpd_maintenance = TabularCPD(variable='Maintenance', variable_card=2, values=[[0.4,0.6,0.2,0.8,0.1,0.9],[0.6,0.4,0.8,0.2,0.9,0.1]], evidence=['Rain'], evidence_card=[3])
How to fix?

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!