AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


【AI】【时间序列】隐马尔可夫链
发布日期:2024-06-07 06:09:04 浏览次数: 1604


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

看效果

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

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

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

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

第 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中,存在三组参数:

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

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

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

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

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

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

来实践

import numpy as np# 生成随机数据def generate_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("生成的随机数据:")for i in range(num_samples):print(f"第 {i+1} 天:观测结果为 {observations[i]},隐藏状态为 {hidden_states[i]}")return hidden_states, observations# 统计状态转移和观测情况def calculate_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]] += 1for i in range(1, len(hidden_states)):transition_counts[hidden_states[i - 1]][hidden_states[i]] += 1observation_counts[hidden_states[i]][observations[i]] += 1return initial_counts, transition_counts, observation_counts# 计算初始概率、状态转移概率和观测概率def calculate_probabilities(initial_counts, transition_counts, observation_counts, num_samples):initial_prob = {state: count / num_samples for state, count in initial_counts.items()}transition_prob = {state1: {state2: count / sum(transition_counts[state1].values()) for state2, count in counts.items()}for state1, counts in transition_counts.items()}observation_prob = {state: {obs: count / sum(observation_counts[state].values()) for obs, count in counts.items()}for state, counts in observation_counts.items()}return initial_prob, transition_prob, observation_prob# 预测下一个状态def predict_next_state(current_observation, initial_prob, transition_prob, observation_prob):next_state_probs = {}for state in initial_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)return next_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亿年后的侏罗纪地层中发现,但三叶虫——一种普遍存在的海洋节肢动物,诞生于寒武纪——永远不会在侏罗纪地层中找到,寒武纪也不会发现恐龙。

参考

https://zh.wikipedia.org/wiki/%E9%9A%90%E9%A9%AC%E5%B0%94%E5%8F%AF%E5%A4%AB%E6%A8%A1%E5%9E%8B


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询