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

🎯要点

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

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

🍇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%

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

👉参阅一:计算思维

👉参阅二:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像加雾算法的研究与应用

目录 前言 一、图像加雾 1、基于传统方法的雾图合成 2、基于深度学习的雾图合成 3、基于Lightroom Classic实现软件加雾 4、基于深度图的方法实现加雾 二、开源的数据集 三、参考文章 前言 在去雾任务当中,训练和评估去雾算法需要大量的带有雾霾和无雾霾的…

聊聊几种常见的分布式Session解决方案

highlight: xcode theme: vuepress 问题引入:什么是分布式Session? 分布式 Session 是指在多台服务器之间共享和管理用户的会话数据,使得用户的会话状态能够在不同的服务器上保持一致。这样,无论用户的请求被路由到哪台服务器&…

常见的几种编码方式

常见的编码方式及其特点: 编码方式的设计是为了适应不同的字符集和应用需求,因此它们在表示字符时使用的位数和字节数各不相同 常见编码方式及其位数和字节数 ASCII(American Standard Code for Information Interchange)&#x…

C#语言进阶(二)—事件 第三篇(事件访问器)

总目录 C# 语法总目录 系列链接 C#语言进阶(二) 事件 第一篇(发布订阅模式) C#语言进阶(二) 事件 第二篇(.net标准事件模型) C#语言进阶(二) 事件 第二篇(事件访问器) 事件 第三篇目录 事件 第三篇3. 事件访问器 事件 第三篇 3. 事件访问器 默认情况下,编…

【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘

🔥 个人主页:空白诗 文章目录 引言一、变量1.1 基础知识1.2 包级变量的声明形式深入解析📌 声明并同时显式初始化📌 声明但延迟初始化📌 声明聚类与就近原则 1.3 局部变量的声明形式深入探讨📌 延迟初始化的…

你认识nginx吗,nginx是做什么的,nginx可以做什么 --1)nginx介绍

一.Nginx 介绍 Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建,并于2004年首次公开发布。同名公司成立于2011年,以提供支持。…

PHP:集成Xunsearch生成前端搜索骨架

如果是安装宝塔,我们在集成xunsearch的时候就会比较简单,后面我们在介绍其他的接入方式; 首先我们进入到宝塔管理后台:【软件商店】-【输入xun】-【点击xunsearch】直接安装即可 安装成功之后,会自动在www/server中创…

spdlog日志库源码:全局管理类registry

概述 已经有了用于接收前端用户log消息的类logger,代表log消息的类是log_msg,后端写log消息到目标文件的类sink,格式化log消息为最终字符串的类formatter,解析pattern flag的类pattern_formatter等等。 每次使用时,可…

Forth Python语言:深度解析其四维、五维、六维与七维之奥秘

Forth Python语言:深度解析其四维、五维、六维与七维之奥秘 在编程语言的浩瀚星空中,Forth Python以其独特的魅力与深邃的内涵,吸引着众多探索者的目光。然而,这门语言究竟有何独到之处?本文将从四维、五维、六维和七…

大模型高级 RAG 检索策略:自动合并检索

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

Flutter 中的 CupertinoSliverNavigationBar 小部件:全面指南

Flutter 中的 CupertinoSliverNavigationBar 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中,CupertinoSliverNavigation…

比较3维空间中4个点的不同结构

在4*4*4的3维空间中,取4个点共有635376种可能,有209个结构,继续按旋转对称分类则只有55个不同的结构。如其中的4t12 4个点在同一个平面,有1个点与其中的3个点不在同一行也不在同一列,这样的位置不止一个 这两个结构都是…

Apache Calcite - 自定义数据源适配之访问内存列表

前言 上一篇文章中学习了Calcite基本概念&#xff0c;其中框架的核心能力是通过统一的Sql访问不同来源的数据。这篇文章中将通过一个简单的例子学习如何实现改功能。 最终通过sql来访问Java List中的数据。 准备工作 maven依赖 <dependency><groupId>org.apache…

ubuntu系统下安装mysql的步骤详解

一、下载安装包 下载地址&#xff1a; https://dev.mysql.com/downloads/repo/apt 跳转到这个页面&#xff1a; 直接点击Download。 直接点击最下面的开始下载安装包即可。 二、将安装包下载到ubuntu系统中 先将用户切换成root用户&#xff0c;把下载好的安装包复制到桌面上&…

域名更换服务器的原因

在互联网的运营过程中&#xff0c;域名更换服务器是一个常见的操作&#xff0c;可能是由于业务扩展、性能需求、成本考虑或服务质量等多种因素。然而&#xff0c;这个过程如果处理不当&#xff0c;可能会导致网站访问中断、搜索引擎排名下降或用户体验受损。本文将探讨在域名更…

系统架构设计师【第11章】: 未来信息综合技术 (核心总结)

文章目录 11.1 信息物理系统技术概述11.1.1 信息物理系统的概念11.1.2 CPS的实现11.1.3 信息物理系统的建设和应用 11.2 人工智能技术概述11.2.1 人工智能的概念11.2.2 人工智能的发展历程11.2.3 人工智能关键技术 11.3 机器人技术概述11.3.1 机器人的概念11.3.2 机…

丛林生存法则其实就两个字:输出

不管你是在上班&#xff0c;还是在灵活就业&#xff0c;现在的大环境下&#xff0c;你要想活下来&#xff0c;生存下去&#xff0c;一定要记住这两个字&#xff1a;输出。如果你能记住更多的字&#xff0c;那便是持续高水平的输出。 你如果是大厂程序员&#xff0c;你肯定发现…

Linux DHCP server 配置

参考&#xff1a;linux dhcp配置多vlan ip_linux 接口vlan-CSDN博客 配置静态IP地址&#xff1a; 给固定的MAC地址分配指定的IP地址&#xff0c;固定的IP地址不必包含在指定的IP池中&#xff0c;如果包含在IP地址池中&#xff0c;固定的IP地址会从IP地址池中移除 配置方法&…

清洁力强的洗地机前十名排行榜:2024十大洗地机热销款式好用不踩雷

如今&#xff0c;洗地机行业竞争激烈&#xff0c;各品牌紧紧抓住用户对智能化和深度清洁的需求&#xff0c;深入研究创新。经过几轮行业内部的激烈竞争后&#xff0c;许多厂商在宣传中各说各的&#xff0c;对洗地机的重要参数描述不一&#xff0c;给消费者的选择带来了不少困惑…

【CVPR_2024】:逐元素乘积为什么会产生如此令人满意的结果?

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言论文重写星形运算一层网络推广多层网络特殊情况 W 1 W_1 W1​和/或 W 2 W_2 W2​…