返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

【AI】【时间序列】隐马尔可夫链

[复制链接]
链载Ai 显示全部楼层 发表于 半小时前 |阅读模式 打印 上一主题 下一主题

这两天抽空看了下隐马尔可夫链,发现这个思路加入了状态转移挖掘的更加深刻!一起来看下!


看效果


这个场景是,村民只告诉医生,他的感觉是{‘正常’,’冷’,’头晕’},然后医生不能直接知道病人是{‘健康’,’发烧’}


医生历史数据:对于村名观测序列{‘正常’,’冷’,’头晕’}对应的隐含状态{‘健康’,’发烧’}


目前一个村名告诉医生:他感觉冷


这个隐马尔可夫链计算出,这个人的状态是冷;


第 1 天:观测结果为 头晕,隐藏状态为 发烧


第 2 天:观测结果为 冷,隐藏状态为 健康


第 3 天:观测结果为 头晕,隐藏状态为 健康


第 4 天:观测结果为 冷,隐藏状态为 发烧


第 5 天:观测结果为 冷,隐藏状态为 健康


第 6 天:观测结果为 正常,隐藏状态为 健康


第 7 天:观测结果为 正常,隐藏状态为 发烧


第 8 天:观测结果为 头晕,隐藏状态为 健康


第 9 天:观测结果为 冷,隐藏状态为 健康


第 10 天:观测结果为 正常,隐藏状态为 健康


第 11 天:观测结果为 冷,隐藏状态为 健康


第 12 天:观测结果为 正常,隐藏状态为 健康


第 13 天:观测结果为 冷,隐藏状态为 发烧


第 14 天:观测结果为 头晕,隐藏状态为 发烧


第 15 天:观测结果为 正常,隐藏状态为 健康


第 16 天:观测结果为 头晕,隐藏状态为 发烧


第 17 天:观测结果为 正常,隐藏状态为 健康


第 18 天:观测结果为 正常,隐藏状态为 健康


第 19 天:观测结果为 头晕,隐藏状态为 健康


第 20 天:观测结果为 冷,隐藏状态为 健康


第 21 天:观测结果为 正常,隐藏状态为 健康


第 22 天:观测结果为 头晕,隐藏状态为 健康


第 23 天:观测结果为 头晕,隐藏状态为 发烧


第 24 天:观测结果为 正常,隐藏状态为 健康


第 25 天:观测结果为 冷,隐藏状态为 健康


第 26 天:观测结果为 头晕,隐藏状态为 健康


第 27 天:观测结果为 正常,隐藏状态为 健康


第 28 天:观测结果为 头晕,隐藏状态为 健康


第 29 天:观测结果为 头晕,隐藏状态为 发烧


第 30 天:观测结果为 正常,隐藏状态为 健康


第 31 天:观测结果为 冷,隐藏状态为 健康


第 32 天:观测结果为 头晕,隐藏状态为 健康


第 33 天:观测结果为 正常,隐藏状态为 发烧


第 34 天:观测结果为 冷,隐藏状态为 健康


第 35 天:观测结果为 头晕,隐藏状态为 健康


第 36 天:观测结果为 正常,隐藏状态为 发烧


第 37 天:观测结果为 头晕,隐藏状态为 发烧


第 38 天:观测结果为 冷,隐藏状态为 健康


第 39 天:观测结果为 头晕,隐藏状态为 健康


第 40 天:观测结果为 正常,隐藏状态为 发烧


第 41 天:观测结果为 冷,隐藏状态为 健康


第 42 天:观测结果为 正常,隐藏状态为 健康


第 43 天:观测结果为 正常,隐藏状态为 健康


第 44 天:观测结果为 冷,隐藏状态为 健康


第 45 天:观测结果为 冷,隐藏状态为 健康


第 46 天:观测结果为 头晕,隐藏状态为 健康


第 47 天:观测结果为 头晕,隐藏状态为 健康


第 48 天:观测结果为 头晕,隐藏状态为 健康


第 49 天:观测结果为 冷,隐藏状态为 健康


第 50 天:观测结果为 冷,隐藏状态为 健康


第 51 天:观测结果为 冷,隐藏状态为 健康


第 52 天:观测结果为 头晕,隐藏状态为 发烧


第 53 天:观测结果为 冷,隐藏状态为 健康


第 54 天:观测结果为 头晕,隐藏状态为 健康


第 55 天:观测结果为 正常,隐藏状态为 发烧


第 56 天:观测结果为 头晕,隐藏状态为 发烧


第 57 天:观测结果为 头晕,隐藏状态为 发烧


第 58 天:观测结果为 冷,隐藏状态为 发烧


第 59 天:观测结果为 冷,隐藏状态为 健康


第 60 天:观测结果为 冷,隐藏状态为 健康


第 61 天:观测结果为 正常,隐藏状态为 发烧


第 62 天:观测结果为 正常,隐藏状态为 健康


第 63 天:观测结果为 正常,隐藏状态为 发烧


第 64 天:观测结果为 冷,隐藏状态为 健康


第 65 天:观测结果为 头晕,隐藏状态为 健康


第 66 天:观测结果为 冷,隐藏状态为 发烧


第 67 天:观测结果为 正常,隐藏状态为 健康


第 68 天:观测结果为 头晕,隐藏状态为 健康


第 69 天:观测结果为 冷,隐藏状态为 发烧


第 70 天:观测结果为 正常,隐藏状态为 健康


第 71 天:观测结果为 冷,隐藏状态为 健康


第 72 天:观测结果为 头晕,隐藏状态为 健康


第 73 天:观测结果为 冷,隐藏状态为 发烧


第 74 天:观测结果为 冷,隐藏状态为 发烧


第 75 天:观测结果为 冷,隐藏状态为 健康


第 76 天:观测结果为 冷,隐藏状态为 健康


第 77 天:观测结果为 头晕,隐藏状态为 健康


第 78 天:观测结果为 冷,隐藏状态为 健康


第 79 天:观测结果为 头晕,隐藏状态为 健康


第 80 天:观测结果为 冷,隐藏状态为 健康


第 81 天:观测结果为 冷,隐藏状态为 发烧


第 82 天:观测结果为 冷,隐藏状态为 健康


第 83 天:观测结果为 冷,隐藏状态为 健康


第 84 天:观测结果为 冷,隐藏状态为 健康


第 85 天:观测结果为 正常,隐藏状态为 健康


第 86 天:观测结果为 正常,隐藏状态为 健康


第 87 天:观测结果为 冷,隐藏状态为 健康


第 88 天:观测结果为 正常,隐藏状态为 发烧


第 89 天:观测结果为 头晕,隐藏状态为 健康


第 90 天:观测结果为 冷,隐藏状态为 健康


第 91 天:观测结果为 正常,隐藏状态为 健康


第 92 天:观测结果为 冷,隐藏状态为 发烧


第 93 天:观测结果为 头晕,隐藏状态为 健康


第 94 天:观测结果为 正常,隐藏状态为 健康


第 95 天:观测结果为 正常,隐藏状态为 健康


第 96 天:观测结果为 冷,隐藏状态为 发烧


第 97 天:观测结果为 头晕,隐藏状态为 健康


第 98 天:观测结果为 正常,隐藏状态为 健康


第 99 天:观测结果为 正常,隐藏状态为 发烧


第 100 天:观测结果为 头晕,隐藏状态为 健康


话原理


如上是隐马尔可夫链的一个应用,隐马尔可夫模型(Hidden Markov Model,HMM)是一种统计模型,用于建模具有潜在隐含状态序列的序列数据。在HMM中,观察到的数据是由一个隐含的马尔可夫链生成的,而这个马尔可夫链的状态是不可见的!


如上观测序列就是病人的感觉{‘正常’,’冷’,’头晕’},然后,隐状态序列就是病人是否{‘健康’,’发烧’}。


在HMM中,存在三组参数:


初始概率:描述了模型开始时每个隐藏状态的概率分布。


状态转移概率:描述了隐藏状态之间的转移概率。


观测概率:描述了在每个隐藏状态下观测到某个观测值的概率分布。


这样就构建了一个隐马尔可夫链条


然后,对于一个观测值,可以去找出来他的最大概率的隐含状态!


应用主要在:时间序列数据进行建模和分析,特别是在语音识别、自然语言处理、生物信息学等


来实践


importnumpyasnp#生成随机数据defgenerate_random_data(num_samples):states=['健康','发烧']observations=['正常','冷','头晕']#随机生成100个状态和观测hidden_states=np.random.choice(states,size=num_samples,p=[0.7,0.3])observations=np.random.choice(observations,size=num_samples)#打印生成的随机数据print("生成的随机数据:")foriinrange(num_samples):print(f"第{i+1}天:观测结果为{observations[i]},隐藏状态为{hidden_states[i]}")returnhidden_states,observations#统计状态转移和观测情况defcalculate_counts(hidden_states,observations):initial_counts={'健康':0,'发烧':0}transition_counts={'健康':{'健康':0,'发烧':0},'发烧':{'健康':0,'发烧':0}}observation_counts={'健康':{'正常':0,'冷':0,'头晕':0},'发烧':{'正常':0,'冷':0,'头晕':0}}initial_counts[hidden_states[0]]+=1foriinrange(1,len(hidden_states)):transition_counts[hidden_states[i-1]][hidden_states[i]]+=1observation_counts[hidden_states[i]][observations[i]]+=1returninitial_counts,transition_counts,observation_counts#计算初始概率、状态转移概率和观测概率defcalculate_probabilities(initial_counts,transition_counts,observation_counts,num_samples):initial_prob={state:count/num_samplesforstate,countininitial_counts.items()}transition_prob={state1:{state2:count/sum(transition_counts[state1].values())forstate2,countincounts.items()}forstate1,countsintransition_counts.items()}observation_prob={state:{obs:count/sum(observation_counts[state].values())forobs,countincounts.items()}forstate,countsinobservation_counts.items()}returninitial_prob,transition_prob,observation_prob#预测下一个状态defpredict_next_state(current_observation,initial_prob,transition_prob,observation_prob):next_state_probs={}forstateininitial_prob.keys():transition_prob_state=transition_prob[state]observation_prob_state=observation_prob[state]next_state_probs[state]=initial_prob[state]*transition_prob_state[state]*observation_prob_state[current_observation]next_state=max(next_state_probs,key=next_state_probs.get)returnnext_state#生成随机数据num_samples=100hidden_states,observations=generate_random_data(num_samples)#统计状态转移和观测情况initial_counts,transition_counts,observation_counts=calculate_counts(hidden_states,observations)#计算初始概率、状态转移概率和观测概率initial_prob,transition_prob,observation_prob=calculate_probabilities(initial_counts,transition_counts,observation_counts,num_samples)#预测下一个状态next_observation='冷'#假设下一个观测结果是冷predicted_state=predict_next_state(next_observation,initial_prob,transition_prob,observation_prob)print("预测下一个状态:",predicted_state)

写在最后


最近另外另外一半的状态不错,活力满满,相信日积月累整个人会变得不一样,时间会回应日常点滴!


最近一周都没有运动了,状态确实有下滑!昨晚买了一本一直刷到的书,抽空了看!


最近的思考就是,允许自己不那么着急出成果,可以多思考,多的深刻一些,多思考一些!另一方面,对于自己的理想平衡生活状态尽量去靠拢,早起支配时间,时间会回应日常点滴!加油!


rudimentary village schooling 初级乡村教育


roamed his uncle’s farm 在他叔叔的农场里游荡


apprenticed(被当学徒) to a surveyor of the local parish使某人当(某人的)学徒


excavating the Somerset Coal Canal


挖掘萨默塞特煤矿运河


steam locomotive


The companies building the canals to transport coal needed surveyors to help them find the coal deposits worth mining as well as to determine the best courses(路线) for the canals.


The companies needed surveyors to help them find the coal deposits worth mining as well as to determine the best courses(路线) for the canals。


rock outcrops 岩石露头


all the while 一直以来


Smith used mail coaches(邮车) to travel as much as 10,000 miles per year 史密斯使用邮车每年行驶10000英里


meticulously一丝不苟


in particular outcrops


While rock between two consistent(一致的) strata might in one place be shale and in another sandstone


strata地层


Smith was able to put all the strata of England’s earth into relative temporal(时间的) sequence. 按相对的时间序列排列。


Soon it was realized that this principal of faunal (animal) succession(演替) was valid not only in England or France but virtually everywhere


很快人们意识到,这种动物群(动物)演替的原则不仅在英国或法国有效,而且几乎在任何地方都有效


Limestone may be found in the Cambrian or—300 million years later—in the Jurassic strata, but a trilobite(三叶虫)—the ubiquitous marine arthropod that had its birth in the Cambrian—will never be found in Jurassic strata, nor a dinosaur in the Cambrian.


石灰岩可能在寒武纪或3亿年后的侏罗纪地层中发现,但三叶虫——一种普遍存在的海洋节肢动物,诞生于寒武纪——永远不会在侏罗纪地层中找到,寒武纪也不会发现恐龙。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ