隐马尔可夫链

# _*_ coding.utf-s _*_
# 开发人员:Mark
# 开发时间:2021/9/30 16:03
# 文件名: 隐马尔可夫链.py


#初始化

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值