有限状态机只是马尔可夫链的实现吗?两者有什么不同?
我正在考虑使用马尔可夫链等创建一个聊天机器人,但我不完全确定如何让它工作.根据我的理解,您可以根据具有给定单词的数据创建表格,然后根据后面的单词创建表格.在训练机器人时是否可以附加任何类型的概率或计数器?这是一个好主意吗?
问题的第二部分是关键字.假设我已经可以从用户输入中识别关键字,如何生成使用该关键字的句子?我并不总是想用关键字开始这个句子,那么如何为马尔可夫链种子?
简而言之:
我在Python 2.7中执行Wave Collapse Function算法的实现存在缺陷,但是我无法确定问题所在。我需要帮助来找出我可能会丢失或做错的事情。
什么是波崩函数算法?
它是Maxim Gumin在2016年编写的一种算法,可以从样本图像生成程序模式。您可以在此处(2D重叠模型)和此处(3D切片模型)看到它的实际效果。
实施目标:
将算法(2D重叠模型)简化为本质,并避免原始C#脚本的冗长和笨拙(令人惊讶的是,它很长且难以阅读)。这是尝试使该算法更短,更清晰和pythonic版本。
此实现的特征:
我正在使用处理(Python模式),这是一种用于视觉设计的软件,可简化图像处理(没有PIL,没有Matplotlib等)。主要缺点是我仅限于Python 2.7,并且无法导入numpy。
与原始版本不同,此实现:
算法(据我了解)
1 /读取输入位图,存储每个NxN模式并计数它们的出现。(可选:具有旋转和反射的增强图案数据。)
例如,当N = 3时:
2 /预计算并存储模式之间的所有可能的邻接关系。在下面的示例中,图案207、242、182和125可以与图案246的右侧重叠
3 /创建一个具有输出尺寸的数组(称为Wwave)。这个阵列的每个元素是一个数组保持状态(True的False每个图案的)。
例如,假设我们在输入中计算了326个唯一模式,并且希望输出尺寸为20 x 20(400个单元)。然后,“ Wave”数组将包含400个(20x20)数组,每个数组包含326个布尔值。
开始时,所有布尔值都设置为,True因为在Wave的任何位置都允许使用每个模式。
W = [[True for pattern in xrange(len(patterns))] for cell in xrange(20*20)]
Run Code Online (Sandbox Code Playgroud)
4 /使用输出的尺寸创建另一个数组(称为H)。该数组的每个元素都是一个浮点数,在输出中保留其对应单元格的“熵”值。
此处的熵是指香农熵,它是根据Wave中特定位置的有效模式数量来计算的。单元格的有效模式(True在Wave中设置为)越多,其熵就越高。 …
马尔可夫链模型和隐马尔可夫模型有什么区别?我在维基百科上读过,但无法理解这些差异.
我正在学习强化学习和阅读萨顿的大学课程.除了经典的PD,MC,TD和Q-Learning算法之外,我还在阅读有关决策问题解决的政策梯度方法和遗传算法.我之前从未有过这个主题的经验,而且我很难理解何时应该优先选择一种技术.我有一些想法,但我不确定.有人可以简单解释或告诉我一个来源,我可以找到一些应该使用某些方法的典型情况吗?据我所理解:
更准确地说,我认为选择一种学习方法,程序员应该问自己以下问题:
但我不知道问题的这些细节如何影响学习方法的选择.我希望有些程序员已经对RL方法有一些经验,可以帮助我更好地理解他们的应用程序.
algorithm artificial-intelligence machine-learning markov-chains reinforcement-learning
我需要一个简单的随机英语句子生成器.我需要用自己的语言填充它,但它需要能够制作更长的句子,至少遵循英语规则,即使它们没有意义.
我希望那里有数百万人,所以不是重新发明轮子,我希望你知道一个人的资源,或者一个资源,它会给我足够的信息,我没有必要追捕我的生锈的英语技能.
我试过google,发现我无法理解.
我理解马尔可夫链是一个非常基本的层次:它是一个数学模型,只依赖于以前的输入来改变状态......那么一种加权随机机会而不是不同标准的FSM?
我听说你可以用它们来产生半智能的废话,给出现有单词的句子用作种类的字典.
我无法想到搜索词来找到这个,所以任何人都可以链接我或解释我如何能够产生一个半智能答案的东西?(如果你问过馅饼,它就不会开始关于它听过的越南战争了)
我计划:
使用马尔可夫链的商业案例是什么?我已经看到马尔可夫链的某种游戏区应用于某人的博客上写一篇假帖子.我想要一些实际的例子吗?例如,在商业或股票市场预测等方面有用......
编辑:感谢所有举例的人,我赞成每一个,因为它们都很有用.
编辑2:我选择了最详细的答案作为接受的答案.所有答案我都投了赞成票.
让我们想象一下,我有两个由同一个人写的英语文本.是否有可能应用一些马尔可夫链算法来分析每个:基于统计数据创建某种指纹,并比较从不同文本得到的指纹?比方说,我们有一个包含100个文本的库.有人写了第1号文字和其他一些文字,我们需要通过分析他/她的写作风格来猜测哪一个.有没有已知的算法呢?可以在这里应用马尔可夫链吗?
我正在玩Hidden Markov模型来解决股市预测问题.我的数据矩阵包含特定安全性的各种功能:
01-01-2001, .025, .012, .01
01-02-2001, -.005, -.023, .02
Run Code Online (Sandbox Code Playgroud)
我适合一个简单的GaussianHMM:
from hmmlearn import GaussianHMM
mdl = GaussianHMM(n_components=3,covariance_type='diag',n_iter=1000)
mdl.fit(train[:,1:])
Run Code Online (Sandbox Code Playgroud)
使用模型(λ),我可以解码观察向量以找到对应于观察向量的最可能的隐藏状态序列:
print mdl.decode(test[0:5,1:])
(72.75, array([2, 1, 2, 0, 0]))
Run Code Online (Sandbox Code Playgroud)
在上面,我已经解码了观察向量O t =(O 1,O 2,...,O d)的隐藏状态序列,其包含测试集中的前五个实例.我想估计测试集中第六个实例的隐藏状态.想法是迭代第六个实例的一组离散的可能特征值,并选择具有最高似然性的观测序列O t + 1 argmax = P(O 1,O 2,...,O d + 1 |λ ).一旦我们观察到O d + 1的真实特征值,我们就可以将序列(长度为5)移动一次并重新执行:
l = 5
for i in xrange(len(test)-l):
values = []
for a in arange(-0.05,0.05,.01):
for b in arange(-0.05,0.05,.01):
for c in arange(-0.05,0.05,.01):
values.append(mdl.decode(vstack((test[i:i+l,1:],array([a,b,c])))))
print …Run Code Online (Sandbox Code Playgroud) python markov-chains markov-models hidden-markov-models hmmlearn
markov-chains ×10
algorithm ×2
nlp ×2
python ×2
chatbot ×1
data-mining ×1
fsm ×1
generator ×1
hmmlearn ×1
markov ×1
math ×1
probability ×1
random ×1
statistics ×1