states = ('rain', 'sun')
observations = ('w', 's', 'c')
start_probability = {'rain': 0.6, 'sun': 0.4}
transition_probability = {
'rain-rain': 0.7, 'rain-sun': 0.3,
'sun-rain': 0.4, 'sun-sun': 0.6}
emission_probability = {
'rain-w': 0.1, 'rain-s': 0.4, 'rain-c': 0.5,
'sun-w': 0.6, 'sun-s': 0.3, 'sun-c': 0.1}
p1_sun = start_probability["sun"] * emission_probability["sun-w"]
p1_rain = start_probability["rain"] * emission_probability["rain-w"]
p1_obs = max(p1_sun,p1_rain)
if p1_sun >= p1_rain :
print("第一天是晴天,且概率是",p1_obs)
else:print("第一天是雨天,且概率是",p1_obs)
p2_sun_tan1 = p1_sun * transition_probability["sun-sun"]
p2_sun_tan2 = p1_rain * transition_probability["rain-sun"]
p2_sun = max(p2_sun_tan2,p2_sun_tan1) * emission_probability["sun-s"]
p2_rain_tan1 = p1_sun * transition_probability["sun-rain"]
p2_rain_tan2 = p1_rain * transition_probability["rain-rain"]
p2_rain = max(p2_rain_tan1,p2_rain_tan2) * emission_probability['rain-s']
p2_obs = max(p2_rain,p2_sun)
if p1_sun >= p1_rain :
print("第二天是晴天,且概率是",p2_obs)
else:print("第二天是雨天,且概率是",p2_obs)
p3_sun_tan1 = p2_sun * transition_probability["sun-sun"]
p3_sun_tan2 = p2_rain * transition_probability["rain-sun"]
p3_sun = max(p3_sun_tan2,p3_sun_tan1) * emission_probability["sun-c"]
p3_rain_tan1 = p2_sun * transition_probability["sun-rain"]
p3_rain_tan2 = p2_rain * transition_probability["rain-rain"]
p3_rain = max(p3_rain_tan1,p3_rain_tan2) * emission_probability['rain-c']
p3_obs = max(p3_rain,p3_sun)
if p1_sun >= p1_rain :
print("第三天是晴天,且概率是",p3_obs)
else:print("第三天是雨天,且概率是",p3_obs)
结果:
第一天是晴天,且概率是 0.24
第二天是晴天,且概率是 0.043199999999999995
第三天是晴天,且概率是 0.01344