Python | R 雌雄配对和鱼仔变异马尔可夫链

devtools/2024/10/22 13:38:16/

🎯要点

🎯马尔可夫链:🖊天气状态马尔可夫链和马尔科夫矩阵 | 🖊多项式隐马尔可夫模型,及其高斯分布 | 🖊算法:前向、后向、前向-后向、维特比算法 | 🖊最大似然学习、特里-韦尔奇算法 | 🖊隐马尔可夫模型贝叶斯学习、估计分布的近似算法 | 🖊词类消歧隐马尔可夫模型 | 🖊马尔可夫决策过程。

🎯马尔可夫模型场景:🎯张量网络分解马尔可夫链 | 🎯动物移动最大似然分析 | 🎯文本语义聚类情感基调分析 | 🎯雌雄动物展示率建模分析配对率 | 🎯光谱能量分布与辐射传输模型 | 🎯鱼仔跨越时间尺度变异运动序列马尔可夫模型 | 🎯种群谱系精确表示 | 🎯麻疹感染传播和潜在风险模型 | 🎯机器人自适应动态学习无迹卡尔曼滤波器和隐马尔可夫模型 | 🎯逆向强化学习逼近正确界限 | 🎯受限玻尔兹曼机训练模型。

🍇Python马尔可夫链计算日常规律

马尔可夫链是具有马尔可夫性质的随机过程。随机过程或通常称为随机性质,是定义为随机变量集合的数学对象。马尔可夫链具有离散状态空间(随机变量的可能值集)或离散索引集(通常表示时间)——鉴于这一事实,马尔可夫链存在许多变体。通常术语“马尔可夫链”专指具有离散时间集的过程,即离散时间马尔可夫链。

离散时间马尔可夫链涉及一个在每个步骤都处于特定状态的系统,并且状态在步骤之间随机变化。这些步数通常被认为是时间上的时刻(但您也可以参考物理距离或任何其他离散测量)。离散时间马尔可夫链是具有马尔可夫性质的随机变量 X 1 , X 2 , X 3 , … X_1, X_2, X_3, \ldots X1,X2,X3, 的序列,使得移动到下一个状态的概率仅取决于当前状态而不取决于先前状态。这是数学概率公式:
Pr ⁡ ( X n + 1 = x ∣ x 1 = x 1 , x 2 = x 2 , … , x n = x n ) = Pr ⁡ ( x n + 1 = x ∣ x n = x n ) \operatorname{Pr}\left(X_{n+1}=x \mid x_1=x_1, x_2=x_2, \ldots, x_n=x_n\right)=\operatorname{Pr}\left(x_{n+1}=x \mid x_n=x_n\right) Pr(Xn+1=xx1=x1,x2=x2,,xn=xn)=Pr(xn+1=xxn=xn)
正如您所看到的, X n + 1 X_{n+1} Xn+1 的概率仅取决于它之前的 X n X_n Xn 的概率。这意味着前一个状态的知识是确定当前状态的概率分布所必需的,满足条件独立规则(或者换句话说:您只需要知道当前状态即可确定下一个状态)。

X i X_i Xi 的可能值形成一个可数集合 S S S,称为链的状态空间。状态空间可以是任何东西:字母、数字、篮球比分或天气状况。虽然时间参数通常是离散的,但离散时间马尔可夫链的状态空间没有任何广泛认可的限制,而是指任意状态空间上的过程。然而,马尔可夫链的许多应用都采用有限或可数无限状态空间,因为它们具有更直接的统计分析。

让我们看一个简单的例子来理解这些概念:

当 C 悲伤时(这种情况并不常见):她要么去跑步,要么吃冰淇淋,要么小睡一会儿。从历史数据来看,如果她度过了悲伤的一天。第二天她有 60% 的可能性会去跑步,20% 的可能性她会躺在床上,还有 20% 的可能性她会大吃冰淇淋。

当她悲伤并去跑步时,她第二天有 60% 的机会去跑步,30% 的机会她狼吞虎咽地吃冰淇淋,只有 10% 的机会她第二天会去睡觉。

最后,当她在悲伤的一天沉迷于冰淇淋时,她第二天继续吃冰淇淋的可能性只有 10%,她有 70% 的可能性会去跑步,有 20% 的可能性她第二天会去睡觉天。

睡觉
跑步
冰激凌

状态图中描绘的马尔可夫链有 3 种可能的状态:睡眠、跑步、冰淇淋。因此,转换矩阵将是 3 x 3 矩阵。请注意,退出状态的箭头总和始终恰好为 1,类似地,转换矩阵中每行的条目总和也必须恰好为 1 - 表示概率分布。在转换矩阵中,单元格的作用与状态图中箭头的作用相同。
睡觉  跑步  冰激凌  睡觉  0.2 0.6 0.2 跑步  0.1 0.6 0.3 冰激凌  0.2 0.7 0.1 \begin{array}{|l|l|l|l|} \hline & \text { 睡觉 } & \text { 跑步 } & \text { 冰激凌 } \\ \hline \text { 睡觉 } & 0.2 & 0.6 & 0.2 \\ \hline \text { 跑步 } & 0.1 & 0.6 & 0.3 \\ \hline \text { 冰激凌 } & 0.2 & 0.7 & 0.1 \\ \hline \end{array}  睡觉  跑步  冰激凌  睡觉 0.20.10.2 跑步 0.60.60.7 冰激凌 0.20.30.1
现在您已经看到了这个示例,这应该能让您了解与马尔可夫链相关的不同概念。

通过您所看到的示例,您现在可以回答以下问题:“从状态:睡眠开始,C 在令人悲伤的 2 天持续时间结束时(状态:跑步)的概率是多少?”

💦建模分析

import numpy as np
import random as rm

现在让我们定义状态及其概率:转移矩阵。请记住,该矩阵将是 3 X 3 矩阵,因为您具有三种状态。此外,您还必须定义转换路径,您也可以使用矩阵来完成此操作。

states = ["Sleep","Icecream","Run"]
transitionName = [["SS","SR","SI"],["RS","RR","RI"],["IS","IR","II"]]
transitionMatrix = [[0.2,0.6,0.2],[0.1,0.6,0.3],[0.2,0.7,0.1]]

一定要确保概率总和为 1。而且留下错误消息也没什么坏处,至少在编码时是这样!

if sum(transitionMatrix[0])+sum(transitionMatrix[1])+sum(transitionMatrix[1]) != 3:print("Somewhere, something went wrong. Transition matrix, perhaps?")
else: print("All is gonna be okay, you should move on!! ;)")

现在让我们编写实际的代码。您将使用 numpy.random.choice 从可能的转换集合中生成随机样本。虽然它的大多数参数都是不言自明的,但 p 可能不是。它是一个可选参数,可让您输入采样集的概率分布,在本例中为转换矩阵。

def activity_forecast(days):activityToday = "Sleep"print("Start state: " + activityToday)activityList = [activityToday]i = 0prob = 1while i != days:if activityToday == "Sleep":change = np.random.choice(transitionName[0],replace=True,p=transitionMatrix[0])if change == "SS":prob = prob * 0.2activityList.append("Sleep")passelif change == "SR":prob = prob * 0.6activityToday = "Run"activityList.append("Run")else:prob = prob * 0.2activityToday = "Icecream"activityList.append("Icecream")elif activityToday == "Run":change = np.random.choice(transitionName[1],replace=True,p=transitionMatrix[1])if change == "RR":prob = prob * 0.5activityList.append("Run")passelif change == "RS":prob = prob * 0.2activityToday = "Sleep"activityList.append("Sleep")else:prob = prob * 0.3activityToday = "Icecream"activityList.append("Icecream")elif activityToday == "Icecream":change = np.random.choice(transitionName[2],replace=True,p=transitionMatrix[2])if change == "II":prob = prob * 0.1activityList.append("Icecream")passelif change == "IS":prob = prob * 0.2activityToday = "Sleep"activityList.append("Sleep")else:prob = prob * 0.7activityToday = "Run"activityList.append("Run")i += 1  print("Possible states: " + str(activityList))print("End state after "+ str(days) + " days: " + activityToday)print("Probability of the possible sequence of states: " + str(prob))activity_forecast(2)
Start state: Sleep
Possible states: ['Sleep', 'Sleep', 'Run']
End state after 2 days: Run
Probability of the possible sequence of states: 0.12

从状态“睡眠”开始,您将获得一组随机的可能转换及其发生的概率。进一步扩展程序,可能以相同的起始状态迭代几百次,然后您可以看到在任何特定状态结束的预期概率及其概率。让我们重写函数 activity_forecast 并添加一组新的循环来执行此操作…

def activity_forecast(days):activityToday = "Sleep"activityList = [activityToday]i = 0prob = 1while i != days:if activityToday == "Sleep":change = np.random.choice(transitionName[0],replace=True,p=transitionMatrix[0])if change == "SS":prob = prob * 0.2activityList.append("Sleep")passelif change == "SR":prob = prob * 0.6activityToday = "Run"activityList.append("Run")else:prob = prob * 0.2activityToday = "Icecream"activityList.append("Icecream")elif activityToday == "Run":change = np.random.choice(transitionName[1],replace=True,p=transitionMatrix[1])if change == "RR":prob = prob * 0.5activityList.append("Run")passelif change == "RS":prob = prob * 0.2activityToday = "Sleep"activityList.append("Sleep")else:prob = prob * 0.3activityToday = "Icecream"activityList.append("Icecream")elif activityToday == "Icecream":change = np.random.choice(transitionName[2],replace=True,p=transitionMatrix[2])if change == "II":prob = prob * 0.1activityList.append("Icecream")passelif change == "IS":prob = prob * 0.2activityToday = "Sleep"activityList.append("Sleep")else:prob = prob * 0.7activityToday = "Run"activityList.append("Run")i += 1    return activityListlist_activity = []
count = 0for iterations in range(1,10000):list_activity.append(activity_forecast(2))for smaller_list in list_activity:if(smaller_list[2] == "Run"):count += 1percentage = (count/10000) * 100
print("The probability of starting at state:'Sleep' and ending at state:'Run'= " + str(percentage) + "%")
The probability of starting at state:'Sleep' and ending at state:'Run'= 62.419999999999995%

这其实就是“大数定律”,这是概率原理之一,即只有当试验次数或实例足够多时,发生概率相同的事件的频率才会趋于平衡。换句话说,随着试验次数的增加,实际结果比率将趋近于理论或预期结果比率。

👉参阅一:python-r-ci-xiong-pei-dui-he-yu-zi-bian-yi-ma-er-ke-fu-lian" rel="nofollow">计算思维

👉参阅二:亚图跨际


http://www.ppmy.cn/devtools/45147.html

相关文章

Linux实验六:进程间通信(二)

目录 一、实验目的二、实验内容三、实验环境四、参考代码五、实验步骤步骤1. 编辑源代码test6.c步骤2. 编译源代码test6.c步骤3. 运行可执行程序test6步骤4. 进一步调试源代码test6.c 六、实验结果七、实验总结 一、实验目的 1、理解 POSIX 和 System V 提供的 IPC 相关概念&a…

校园导航系统C++

制作一个简单的大学城导航系统,根据用户指定的起点和终点,求出最短路径长度以及具体路径。 项目要求: 1)程序与数据相分离,地图中的所有数据都是从文件读入,而不是写在代码中 2)最短路径算法…

十四天学会Vue——Vue 组件化编程(理论+实战)(第四天)

二、 Vue组件化编程 2.1 组件化模式与传统方式编写应用做对比: 传统方式编写应用 依赖关系混乱,不好维护:例如:比如需要引入js1,js2,js3,但是js3需要用到js1、2的方法,所以js1、2…

【星海出品】Langchain Prompt template

Management prompt words We can use this program to face students from different families. But now this program cannot communicate in Chinese. URL: https://platform.openai.com/account/api-keys LLMs: 这是一个语言模型,It lets input word…

JavaSE:异常

1、什么是异常 在生活当中,不管是人还是动物又或是植物,都会生病;在程序中也是,作为程序猿,虽然我们会尽力将程序写的完美,可难免会出现一些问题~ 在程序执行过程中,发生的一些不正常行为&…

ChatGPT-4o在临床医学日常工作、论文高效撰写与项目申报、数据分析与可视化、机器学习建模中的应用

ChatGPT-4o在临床医学日常工作、论文高效撰写与项目申报、数据分析与可视化、机器学习建模中的应用 2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5,将人工智能的发展推向了一个新的高度。…

【Linux 网络】网络基础(三)(其他重要协议或技术:DNS、ICMP、NAT)

一、DNS(Domain Name System) DNS 是一整套从域名映射到 IP 的系统。 1、DNS 背景 TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序,但是 IP 地址不方便记忆。于是人们发明了一种叫主机名的东西,是一个字符串&…

SQL 语言:对象关系数据模型

文章目录 嵌套关系复杂类型继承引用类型与复杂类型有关的查询函数和过程总结 对象关系数据模型扩展关系数据模型的方式是通过提供一个包括复杂数据类型和面向对象的更丰富的类型系统。 嵌套关系 嵌套关系模型(Nested Relational Model)是关系模型的一个扩展,域可以…