微信扫码
与创始人交个朋友
我要投稿
这两天抽空看了下隐马尔可夫链,发现这个思路加入了状态转移挖掘的更加深刻!一起来看下!
看效果
这个场景是,村民只告诉医生,他的感觉是{‘正常’,’冷’,’头晕’},然后医生不能直接知道病人是{‘健康’,’发烧’}
医生历史数据:对于村名观测序列{‘正常’,’冷’,’头晕’}对应的隐含状态{‘健康’,’发烧’}
目前一个村名告诉医生:他感觉冷
这个隐马尔可夫链计算出,这个人的状态是冷;
第 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]] += 1
for i in range(1, len(hidden_states)):
transition_counts[hidden_states[i - 1]][hidden_states[i]] += 1
observation_counts[hidden_states[i]][observations[i]] += 1
return 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 = 100
hidden_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+中大型企业
2024-08-18
当产品经理谈到用LLM Agent构建新一代智能体的时候,他们在说什么?
2024-08-15
对话AI教育从业者们:AI如何解决因材施教的难题?
2024-08-03
工业应用中的向量数据库与知识向量化存储方案
2024-07-25
两大深度学习框架TensorFlow与PyTorch对比
2024-07-17
让生成式 AI 触手可及:NVIDIA NIM on VKE 部署实践
2024-07-16
中文大模型基准测评2024上半年报告
2024-07-16
一文看懂人工智能的起源、发展、三次浪潮与未来趋势
2024-07-14
"自拍" 秒变 "证件照" 看Coze如何实现
2024-05-14
2024-04-26
2024-05-22
2024-04-12
2024-07-18
2024-03-30
2024-05-10
2024-08-13
2024-04-25
2024-04-26