class HMM: def __init__(self): self.states = ('Rainy', 'Sunny') self.observations = ('walk', 'shop', 'clean') self.start_probability = {
'Rainy': 0.6, 'Sunny': 0.4} self.transition_probability = {
'Rainy': {
'Rainy': 0.7, 'Sunny': 0.3}, 'Sunny': {
'Rainy': 0.4, 'Sunny': 0.6}, } self.emission_probability = {
'Rainy': {
'walk': 0.1, 'shop': 0.4, 'clean': 0.5}, 'Sunny': {
'walk': 0.6, 'shop': 0.3, 'clean': 0.1}, } # weather填 Rainy 或者 Sunny def day1(self, weather): return self.start_probability[weather] * self.emission_probability[weather]['walk'] def day23(self, before_r, before_s, weather, do_something): return max(before_r * self.transition_probability['Rainy'][weather], before_s * self.transition_probability['Sunny'][weather]) * \ self.emission_probability[weather][do_something] def result(self): temp = {
} path = {
} temp['R1'] = self.day1("Rainy") temp['S1'] = self.day1("Sunny") temp['R2'] = self.day23(temp['R1'], temp['S1'], "Rainy", 'shop') temp['S2'] = self.day23(temp['R1'], temp['S1'], "Sunny", 'shop') temp['R3'] = self.day23(temp['R2'], temp['S2'], "Rainy", 'clean') temp['S3'] = self.day23(temp['R2'], temp['S2'], "Sunny", 'clean') for i in range(1, 4): if temp['R%d' % i] > temp['S%d' % i]: path['R%d' % i] = temp['R%d' % i] else: path['S%d' % i] = temp['S%d' % i] print(path) hmm = HMM() hmm.result()
讯享网
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
下面代码是错的,不要看!
讯享网# 晴天walk Psw = 0.6 Prw = 0.1 # 晴天shop Pss = 0.3 Prs = 0.4 # 晴天clear Psc = 0.1 Prc = 0.5 # 晴天转晴天 Ps_s = 0.6 # 晴天转阴天 Ps_r = 0.4 # 阴天转晴天 Pr_s = 0.3 # 阴天转阴天 Pr_r = 0.7 # 第一天下雨 def Rday1(): prob = 0.6 * Prw return prob # 第一天晴天 def Sday1(): prob = 0.4 * Psw return prob # 第二天雨天 购物 def Rday2(day1, probday1): # 第一天雨天转雨天 if day1 == "r": prob = probday1 * Pr_r * Prs # 第一天晴天转雨天 else: prob = probday1 * Ps_r * Prs return prob # 第二天晴天 def Sday2(day1, probday1): # 第一天雨天转晴天 if day1 == "r": prob = probday1 * Pr_s * Pss # 第一天晴天转晴天 else: prob = probday1 * Ps_s * Pss return prob # 第三天雨天清理 def Rday3(day2, probday2): # 第二天雨天转雨天 if day2 == "r": prob = probday2 * Pr_r * Prc # 第二天晴天转雨天 else: prob = probday2 * Ps_r * Prc return prob # 第三天晴天 def Sday3(day2, probday2): # 第二天雨天转晴天 if day2 == "r": prob = probday2 * Pr_s * Psc # 第二天晴天转晴天 else: prob = probday2 * Ps_s * Psc return prob # 第一天天气概率 S1 = Sday1() R1 = Rday1() print("第一天雨天概率:", R1) print("第一天晴天概率:", S1) SS2 = Sday2('s', S1) RS2 = Sday2('r', R1) S2 = SS2 + RS2 print("第二天晴天概率:", S2) SR2 = Rday2('s', S1) RR2 = Rday2('r', R1) R2 = SR2 + RR2 print("第二天雨天概率:", R2) SR3 = Rday3('s', S2) RR3 = Rday3('r', R2) R3 = SR3 + RR3 print("第三天雨天概率:", R3) SS3 = Sday3('s', S2) RS3 = Sday3('r', R2) S3 = SS3 + RS3 print("第三天晴天概率:", S3) print(max(R1, S1), max(R2, S2), max(R3, S3)) # 晴天 雨天 雨天 # print("SS2", SS2) # print("RS2", RS2) # print("SR2", SR2) # print("RR2", RR2) # print("SR2", SR3) # print("RR2", RR3) # print("SR2", SS3) # print("RR2", RS3)
预测结果:

晴天 雨天 雨天

第二版
核心部分:
讯享网 ```# 第一天天气为1,第二天为2,第三天为3 # 输入前一天晴天、下雨概率,今天编号及天气,此天气下做某事概率 def predict(before_s_prob, before_r_prob, today, weather, do_something): global result if today == 1: if weather == 'r': result = 0.6 * do_something else: result = 0.4 * do_something else: if weather == 's': result = (before_r_prob * Pr_s + before_s_prob * Ps_s) * do_something elif weather == 'r': result = (before_r_prob * Pr_r + before_s_prob * Ps_r) * do_something return today, weather, result
测试案例
# 晴天walk Psw = 0.6 Prw = 0.1 # 晴天shop Pss = 0.3 Prs = 0.4 # 晴天clear Psc = 0.1 Prc = 0.5 # 晴天转晴天 Ps_s = 0.6 # 晴天转阴天 Ps_r = 0.4 # 阴天转晴天 Pr_s = 0.3 # 阴天转阴天 Pr_r = 0.7 # 第一天天气为1,第二天为2,第三天为3 # 输入前一天晴天、下雨概率,今天编号及天气,此天气下做某事概率 def predict(before_s_prob, before_r_prob, today, weather, do_something): global result if today == 1: if weather == 'r': result = 0.6 * do_something else: result = 0.4 * do_something else: if weather == 's': result = (before_r_prob * Pr_s + before_s_prob * Ps_s) * do_something elif weather == 'r': result = (before_r_prob * Pr_r + before_s_prob * Ps_r) * do_something return today, weather, result if __name__ == '__main__': print("---------------测试案例 start-------------") Result = predict(0.24, 0.06, 2, "r", Prs) print("第{0}天是{1}的概率为{2}".format(Result[0], Result[1], Result[2])) print("---------------测试案例 end-------------") R1 = predict(0, 0, 1, "r", Prw) S1 = predict(0, 0, 1, "s", Psw) R2 = predict(0.24, 0.06, 2, "r", Prs) S2 = predict(0.24, 0.06, 2, "s", Pss) R3 = predict(0.0486, 0.0552, 3, "r", Prc) S3 = predict(0.0486, 0.0552, 3, "s", Psc) print(R1) print(S1) print(R2) print(S2) print(R3) print(S3)


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/32168.html