问题标签 [markov-models]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
machine-learning - 马尔可夫链 - 具有“未见”观察的样本的可能性(概率 0)
我有一个大的马尔可夫链和一个样本,我想计算它的可能性。问题是样本中的某些观察或转换不会发生在马尔可夫链中,这使得总可能性为 0(或对数似然 - 无穷大)。不可能使用更多的数据来构建马尔可夫链。我想知道是否有办法仍然有一个有意义的可能性。
我已经尝试过滤掉样本中的这些“未知”观察结果并单独报告它们。但问题是我想将样本的可能性与同一样本的可能性进行比较,但在转换之后。转换后的样本具有不同数量的“未知”观察值。所以我认为我不能比较这两种可能性,因为它们是用不同数量的观察值计算出来的。
有没有办法仍然计算可以比较的有意义的可能性?我正在考虑对样本中观察的概率进行平均,但我找不到任何关于正确的信息。
提前致谢!
python - python中的马尔科夫一阶文本处理
我编写了从给定文本文件生成文本的代码。我使用马尔科夫一阶模型。首先从文本文件创建字典。在标点符号('.','?','!')的情况下,它的键是'$'。创建字典后,我从创建的字典中随机生成文本。当它检测到'$'时,它开始新的句子。我的代码如下:
我的文本文件('a.txt')是:
我正在 python 中进行马尔科夫一阶文本处理。它会在我的代码中工作吗?我也不寻求别人的帮助。我相信我犯了一个幼稚的错误!但我无法修复它。
输入: d = createDictionary('a.txt')
打印生成文本(d,50)
输出:随机 4 行中的 1 行。
谁能建议我如何修复此代码以使其正确生成输入的文本?
python - 马尔可夫模型的多次转换
我试图通过一个类的马尔可夫模型的多次转换来运行一个数据框。
数据框如下所示:
我有这个代码来运行它两次:
我需要通过模型 X 次运行它。我很难找到关于 dot() 的文档,但从我发现的情况来看,您似乎无法将它运行 X 次。
任何帮助将不胜感激,谢谢!
linear-algebra - 证明转移矩阵的每行自积之和为1
我无法证明转换矩阵的每行自积之和为 1...
令 A 为转移概率矩阵,表示 A 的每一行总和为 1,令 P=A*A。
我想证明 P 也是一个有效的转移矩阵,即 P 的每一行总和为 1。
请帮忙。
问候。
java - Java中的马尔可夫模型决策过程
我正在用 Java 编写辅助学习算法。
我遇到了一个我可能可以解决的数学问题,但是因为处理会很繁重,我需要一个最佳解决方案。
话虽如此,如果有人知道一个非常棒的优化库,但语言是 Java,所以需要考虑。
这个想法很简单:
对象将存储 ABDC、ACDE、DE、AE 等变量的组合。
组合的最大数量将取决于我可以在不减慢程序速度的情况下运行多少,所以理论上可以说是 100。
决策过程将在每次迭代中生成一个随机变量。如果生成的变量是组合之一的一部分,例如。'A' 是 ABDC 和 ACDE 的一部分,而不是 C 和 B(或存储组合中的任何后续字母)的倾向会增加。
为了让事情更清楚一点,让我们假设“A”、“B”、“C”、“D”和“E”是唯一可能的变量。事实是,会有更多的像 12 或 14,但这个最大值还取决于我可以在没有延迟的情况下处理多少。
由于有五个可能的变量,它将为第一次迭代生成加权 1/5 随机滚动。如果该滚动结果是“A”,那么在下一次迭代中,“B”和“C”现在将具有 2/5 的倾向,而不是 1/5。
如果下一次迭代要生成“B”,则“D”倾向将增加到 3/5。注意:关系是指数的;实际上,它不会是 1/5,而是像 10% 这样的轻微提升,如果它达到序列中的第 4 个变量,它将滚雪球到 50%。
现在,在 Java 中,我可能可以通过跟踪每个对象的所有存储组合来实现此功能。我在想,通过在每次迭代中分小步分布跟踪过程,它不应该太慢。
另一种解决方案是映射所有可能的组合及其潜在倾向。这当然只需要一个搜索功能,但在计算所有可能性并存储在某个地方(可能是在一个文件中)时也会出现问题。
有人建议我应该使用马尔可夫模型和/或库,尽管我对这种类型的数学不太熟悉。
如何在 Java 中快速计算这个过程?
.
示例 >>>
只有一个序列ABC。
对于三个数字,机会开始相等,所以它看起来像 rand(1,3)
如果 A 是结果,我们会增加 B 的可能性,因为它是序列中的下一个字母。可以说我们加倍。
所以现在的机会是:A=1/4,C=1/4,B=2/4
该函数现在看起来像 rand(1,4),其中 3 和 4 的结果都代表选项 B。
如果下一个结果是 B,我们希望增加 C 的可能性,因为它是序列中的下一个字符,但是上次增加的两倍(指数)
现在的机会是:A=1/6, C=1/6, B=4/6
该函数现在是 rand(1/6),其中值 3、4、5、6 代表 C。
machine-learning - 一个直观的马尔可夫网络 (MRF) 教程?
我想了解马尔可夫网络(MRF)的基础知识。有谁知道有关该主题的直观教程。我只需要有关无向图模型的非常基本的信息。例如,如何计算简单无向图(例如 ABC)的联合分布和条件概率?
algorithm - 用于估计高维 Markov-Switching /HMM 模型的似然函数的期望与直接数值优化
我目前正在使用对数似然函数的直接优化(通过前向后向算法)来估计具有许多参数的马尔可夫切换模型。我使用 matlab 的遗传算法进行数值优化,因为其他方法,例如 fmincon 和 fminsearchbnd 中的(主要是梯度或基于单纯形的)算法并不是很有用,因为似然函数不仅维度非常高,而且还显示了许多局部最大值并且是高度非线性的。遗传算法似乎工作得很好。但是,我计划进一步增加问题的维度。我读过关于估计马尔可夫切换模型的 EM 算法。据我了解,该算法释放了一系列增加的对数似然值。因此,估计具有非常多参数的模型似乎是合适的。
我的问题是 EM 算法是否适合我涉及许多参数的应用程序(也许更适合作为遗传算法)。速度不是主要限制(遗传算法已经非常慢),但我需要有一些确定性才能最终接近全局最优并且不会遇到许多局部最优之一。您对此有什么经验或建议吗?
hidden-markov-models - 马尔可夫决策过程:相同的动作导致不同的状态
上周我读到一篇论文,建议将 MDP 作为推荐系统的替代解决方案,该论文的核心是用 MDP 表示推荐过程,即状态、动作、转换概率、奖励函数等。
如果我们为简单起见假设一个单用户系统,那么状态看起来像 k 元组(x1, x2, .. , xk)
,其中最后一个元素 xk 表示用户购买的最后一个项目。例如,假设我们当前的状态是(x1, x2, x3)
,用户按时间顺序购买了 x1,然后是 x2,然后是 x3。现在如果他购买 x4,新状态将是(x2, x3, x4)
.
现在,该论文的建议是,这些状态转换是由动作触发的,其中动作是“向用户推荐项目 x_i”。但问题是这样的行动可能会导致不止一种状态。
例如,如果我们当前的状态是(x1, x2, x3)
,并且操作是向用户“推荐 x4”,那么可能的结果可能是二分之一:
用户接受 x4 的推荐,新状态将是(x2, x3, x4)
用户忽略 x4 的推荐(即购买其他东西),新状态将是(x2, x3, xi)
xi != x4的任何状态
我的问题是,MDP 是否真的支持触发两个或多个不同状态的相同动作?
更新。我认为动作应该被表述为“获得项目 x_i 的推荐并接受它”和“获得项目 x_i 的推荐并拒绝它”,而不是简单地“获得项目 x_i 的推荐”
dynamic-programming - 连续时间有限范围 MDP
有没有解决有限范围半马尔可夫决策过程的算法?
我想为具有有限动作空间、有限状态空间和截止日期的顺序决策问题找到最佳策略。至关重要的是,不同的动作需要不同的时间,对于其中一个动作,这个持续时间是随机的。我可以根据可用的方法将时间建模为离散的或连续的。
我知道折扣无限视野半 MDP 的算法,但我找不到任何关于有限视野半 MDP 的工作。以前研究过这类问题吗?
machine-learning - 价值迭代和策略迭代有什么区别?
在强化学习中,策略迭代和价值迭代有什么区别?
据我所知,在价值迭代中,您使用贝尔曼方程来求解最优策略,而在策略迭代中,您随机选择一个策略 π,并找到该策略的奖励。
我的疑问是,如果您在 PI 中选择一个随机策略 π,即使我们选择多个随机策略,如何保证它是最优策略。