问题标签 [markov-chains]
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.
java - Java中递归算法的优化
背景
我有一组有序的数据点存储为TreeSet<DataPoint>
. 每个数据点都有一个position
和一个Set
对象Event
( HashSet<Event>
)。
有 4 个可能的Event
对象A
、B
、C
和D
。每个DataPoint
都有 2 个,例如A
和C
,除了集合中的第一个和最后一个DataPoint
对象,它们T
的大小为 1。
我的算法是在这个集合中找到一个新DataPoint
Q
位置x
的概率。Event
q
我通过计算S
这个数据集的值,然后添加Q
到集合中并S
再次计算来做到这一点。然后我将第二个S
除以第一个以隔离新的概率DataPoint
Q
。
算法
计算公式为S
:
http://mathbin.net/equations/105225_0.png
在哪里
http://mathbin.net/equations/105225_1.png
http://mathbin.net/equations/105225_2.png
对于 http://mathbin.net/equations/105225_3.png
和
http://mathbin.net/equations/105225_4.png
http://mathbin.net/equations/105225_5.png是一个昂贵的概率函数,它只依赖于它的参数而不依赖于其他任何东西(和http://mathbin.net/equations/105225_6.png),http://mathbin。 net/equations/105225_7.png是集合中的最后一个DataPoint
(右手节点),http ://mathbin.net/equations/105225_8.png 是第一个DataPoint
(左手节点),http ://mathbin.net/equations/105225_9 .png是最右边DataPoint
的不是节点,http ://mathbin.net/equations/105225_10.png是一个DataPoint
,http://mathbin.net/equations/105225_12.png是这个Set
的事件DataPoint
。
所以Q
with的概率Event
q
是:
http://mathbin.net/equations/105225_11.png
执行
我在Java中实现了这个算法,如下所示:
所以要找到Q
atx
的概率q
:
问题
就目前的实现而言,它严格遵循数学算法。然而,这在实践中并不是一个特别好的主意,因为f
每个DataPoint
. 因此,对于http://mathbin.net/equations/105225_9.png,f
被调用两次,然后对于n-1
f
之前的每个调用再次调用 两次,依此类推。O(2^n)
考虑到DataPoints
每个Set
. 因为p()
它独立于除参数之外的所有内容,所以我包含了一个缓存函数,如果p()
已经对这些参数进行了计算,它只是返回之前的结果,但这并不能解决固有的复杂性问题。关于重复计算,我是否在这里遗漏了一些东西,或者这个算法中的复杂性是不可避免的?
java - 计算值太大而无法取幂的马尔可夫链概率
我使用公式 exp(X) 作为马尔可夫链的速率。所以选择一个链接相对于另一个链接的比率是 exp(X1)/exp(X2)。我的问题是有时 X 非常大,所以 exp(X) 会超出 的范围double
。
或者:给定一个 X[i] 数组,其中一些 X[i] 大到 exp(X[i]) 溢出 的范围double
,计算每个 i 的 exp(X[i]) / S,其中 S是所有 exp(X[i]) 的总和。
string - 比较和可视化序列组
我有两组字母“AGTE”的字符串A和B,我想找到一些比较它们的方法,看看它们在统计上是否相似。第一组 A 是真实世界的观察,B 是预测。每组有 400 人左右
我还想以某种方式将这些可视化,真正用于演示目的。你有什么想法我可以做到这一点吗?
matlab - 计算字符串在序列中出现的次数
我有一个矩阵 X,它由我从马尔可夫链中获得的一些序列组成。我有 5 个州 1,2,3,4,5。因此,例如第 1 行是一个序列,第 2 行是一个单独的独立序列。
我想计算状态 1..5 之间的转换次数。IE。1to1,1to2, 1to3, 1to4, 1to5。2to1 等。1to1 发生 0 次。但是 4to4 发生了 6 次。等等我们可以忽略零,它们是导入 excel 文件的人工制品。
例如这个问题,但在那里,序列已经连接起来。如果您需要进一步说明,请告诉我。
video - 高级视频分析 - 如何咬它?
我需要做一个应用程序:
- 从摄像机捕获视频数据,
- 做一些处理(蒙特卡洛方法,马尔科夫场和链等),
- 将数据保存为视频文件,上表面包含有关处理的信息(例如,将标记找到的对象),
- 将所有内容(不是视频本身,而是对象的位置等)保存到数据库中,以便将来进行统计管理。
所有这些都需要实时、连续地完成。
我是数据库程序员(C#、Java、Python),所以这对我来说是新事物......选择什么语言以及如何开始,据说我对需要完成的处理非常了解,但只是理论上 - 我知道步骤、计算……只需要一个工具。
python - 如何从马尔可夫链输出创建段落?
我想修改下面的脚本,以便它从脚本生成的随机数量的句子中创建段落。换句话说,在添加换行符之前连接一个随机数(如 1-5)的句子。
该脚本按原样运行良好,但输出是由换行符分隔的短句。我想把一些句子整理成段落。
关于最佳实践的任何想法?谢谢。
编辑 01:
好的,我拼凑了一个简单的“段落包装器”,它可以很好地将句子收集到段落中,但它与句子生成器的输出混淆了——例如,我的第一个单词的重复性过多,等等问题。
但前提是合理的;我只需要弄清楚为什么句子循环的功能会受到添加段落循环的影响。请告知您是否可以看到问题:
编辑 02:
sentence = []
根据下面的答案添加到elif
声明中。以机智;
编辑 03:
这是该脚本的最后一次迭代。感谢 grieve 帮助解决这个问题。我希望其他人可以从中获得一些乐趣,我知道我会的。;)
仅供参考:有一个小工件 - 如果您使用此脚本,您可能需要清理一个额外的段落结尾空间。但是,除此之外,马尔可夫链文本生成的完美实现。
matlab - Matlab:帕累托分布的马尔可夫链
我经常使用马尔可夫链来近似一阶自回归过程 AR(1)。现在我想从帕累托分布中提取值。有人知道如何为这种分布构建马尔可夫链吗?关键是我用 n 个网格点来近似 Pareto 的无限状态空间。马尔可夫链模拟的时间序列应该看起来与模拟帕累托分布时的时间序列“相似”。
c# - 是否可以将马尔可夫链引导至某些关键字?
我正在为 C# 中的软件工程课程编写聊天机器人。
我使用马尔可夫链生成文本,使用维基百科文章作为语料库。我希望它根据用户的输入以(至少稍微)智能的方式响应用户输入,但我不知道该怎么做。
我目前的想法是尝试从用户输入中提取关键字,然后使用这些关键字来指导句子生成。但是由于马尔可夫属性,关键字必须是句子中的第一个单词,这可能看起来很傻。同样,对于n
订单链,我每次都必须从用户那里准确提取关键字。 n
生成器的数据是一个字典,其中键是单词列表,值是单词列表以及权重,这取决于单词在键中单词之后出现的频率。就像:
它在命令行测试程序中工作,但我只是为n
它生成的每一位文本提供一个单词种子。
我希望有某种方法可以使链更喜欢用户使用的附近单词,而不是使用n
输入中的第一个/最后一个单词或n
关键字或其他任何单词来播种。有没有办法做到这一点?
c - 马尔可夫清洁功能故障
我正在尝试编写一个函数来清理此代码生成的哈希表
这是我到目前为止的清洁功能
我认为我在正确的轨道上,我正在遍历哈希表中的每个索引,然后从一个状态到另一个状态并释放后缀。我不确定如何处理前缀,因为我必须先释放它们才能释放每个状态。任何帮助将不胜感激。
matlab - 超出矩阵维度的索引
我试图在 matlab 中获得这个低阶递归函数。我想在下一个时间步计算一个站点的状态概率,因为我有一个状态的初始概率。
这就是我所做的!但我的索引总是超过矩阵尺寸!我需要这方面的帮助。
堆栈跟踪是: