AI/Unit 5/Umaretiya_r_U5_L1.py

116 lines
3.6 KiB
Python

from pomegranate import *
# Pop Quiz
# Graduated (G) Node
Graduated = DiscreteDistribution({'graduated':0.9, 'no-graduated':0.1})
# Offer Child Nodes
Offer1 = ConditionalProbabilityTable([
['graduated', 'offer', 0.5],
['graduated', 'no-offer', 0.5],
['no-graduated', 'offer', 0.05],
['no-graduated', 'no-offer', 0.95]], [Graduated])
Offer2 = ConditionalProbabilityTable([
['graduated', 'offer', 0.75],
['graduated', 'no-offer', 0.25],
['no-graduated', 'offer', 0.25],
['no-graduated', 'no-offer', 0.75]], [Graduated])
# Setting up states for each node
s_graduated = State(Graduated, 'graduated-offer')
s_offer_1 = State(Offer1, 'offer_1')
s_offer_2 = State(Offer2, 'offer_2')
# Creating Bayesian Network
model = BayesianNetwork('graduated-offer')
# Adding nodes to network
model.add_states(s_graduated, s_offer_1, s_offer_2)
# Creating edges
model.add_transition(s_graduated, s_offer_1)
model.add_transition(s_graduated, s_offer_2)
model.bake() # finalize the topology of the model
print()
print('Pop Quiz:')
print('The number of nodes:', model.node_count())
print('The number of edges:', model.edge_count())
# predict_proba(Given factors)
# P(o2 | g, ~o1)
print('P(o2 | g, ~o1): ', model.predict_proba({'graduated-offer': 'graduated', 'offer_1': 'no-offer'})[2].parameters[0]['offer'])
# predict_proba(Given factors)
# P(g | o1, o2)
print('P(g | o1, o2): ', model.predict_proba({'offer_1': 'offer', 'offer_2': 'offer'})[0].parameters[0]['graduated'])
# predict_proba(Given factors)
# P(g | ~o1, o2)
print('P(g | ~o1, o2): ', model.predict_proba({'offer_1': 'no-offer', 'offer_2': 'offer'})[0].parameters[0]['graduated'])
# predict_proba(Given factors)
# P(g | ~o1, ~o2)
print('P(g | ~o1, ~o2): ', model.predict_proba({'offer_1': 'no-offer', 'offer_2': 'no-offer'})[0].parameters[0]['graduated'])
# predict_proba(Given factors)
# P(o2 | o1)
print('P(o2 | o1): ', model.predict_proba({'offer_1': 'offer'})[2].parameters[0]['offer'])
# Example 5, Day 2 Note
# Happiness Factors
Sunny = DiscreteDistribution({'sunny':0.7, 'not-sunny':0.3})
Raise = DiscreteDistribution({'raise': 0.01, 'no-raise': 0.99})
# Happiness Conditional Probability
Happiness = ConditionalProbabilityTable([
['sunny', 'raise', 'happy', 1],
['sunny', 'raise', 'not-happy', 0],
['sunny', 'no-raise', 'happy', 0.7],
['sunny', 'no-raise', 'not-happy', 0.3],
['not-sunny', 'raise', 'happy', 0.9],
['not-sunny', 'raise', 'not-happy', 0.1],
['not-sunny', 'no-raise', 'happy', 0.1],
['not-sunny', 'no-raise', 'not-happy', 0.9]], [Sunny, Raise])
# Setting up states for each node
s_sunny = State(Sunny, 'is-sunny')
s_raise = State(Raise, 'got-raise')
s_happiness = State(Happiness, 'happiness')
# Creating Bayesian Network
model = BayesianNetwork('happiness-network')
# Adding nodes to network
model.add_states(s_sunny, s_raise, s_happiness)
# Creating edges
model.add_transition(s_sunny, s_happiness)
model.add_transition(s_raise, s_happiness)
model.bake() # finalize the topology of the model
print()
print('Day 2 Note, Example 3:')
print('The number of nodes:', model.node_count())
print('The number of edges:', model.edge_count())
# predict_proba(Given factors)
# P(r | s)
print('P(r | s): ', model.predict_proba({'is-sunny': 'sunny'})[1].parameters[0]['raise'])
# predict_proba(Given factors)
# P(r | h, s)
print('P(r | h, s): ', model.predict_proba({'is-sunny': 'sunny', 'happiness': 'happy'})[1].parameters[0]['raise'])
# predict_proba(Given factors)
# P(r | h)
print('P(r | h): ', model.predict_proba({'happiness': 'happy'})[1].parameters[0]['raise'])
# predict_proba(Given factors)
# P(r | h, ~s)
print('P(r | h, ~s): ', model.predict_proba({'is-sunny': 'not-sunny', 'happiness': 'happy'})[1].parameters[0]['raise'])