我是机器学习的新手,所以如果问题很简单,请放心。
我已经获得了一系列观察到的字符,例如ABABBABBB .....(n个字符)。我的目标是通过某些人来预测下一个角色"学习"机制。我的约束是,观察到的字符(训练数据?)并不是太多,即我已经说了一个长度为6000的序列来学习基础模式
我很担心解决这个问题需要采取什么策略,我最初的赌注是: 1)某种ngram模型? 2)神经网络(LSTM等)? 3)HMM
您能否指出解决此问题的正确方法?
答案 0 :(得分:3)
您的问题看起来像是一个时间序列分析。为此,您还应该考虑使用统计和探索性数据分析(EDA)以及机器学习算法。
我首先要为字符分配数字(A-> 1,B-> 2,依此类推)。通常不建议将名义变量(没有顺序的值)转换为序数变量(2大于1但是#34; C"大于" A"或" Red& #34;大于"绿色"?!)但在这种情况下,这会将您的问题转变为绝对的时间序列分析。
然后我会使用一些常规的EDA方法,例如4-plot或autocorrelation分析。这会告诉你很多关于数据的统计行为,比如"数据转移的意思是什么?"或"数据集可能有多少随机?"之后,您可能会更好地决定使用哪种机器学习算法
根据您在EDA分析中可能会发现的内容,您可以继续实施ML算法。如果您具有高相关数据(从自相关图中感知),那么您可能会在特征选择中选择滑动窗口方法,即假设每个值取决于先前的k值(x_k = f(x_(k-1),x_(k-2),...,x_(k-m))
)。 " m"的价值可以通过分析自相关图来选择。如果你有一个移动平均线,那么首先学习平均曲线然后继续学习每个实例与其平均值的偏移量是个好主意。如果您在平均曲线或实例偏移中感知到一定程度的随机性,那么您可能希望通过预测问题选择随机方法。
一般来说,EDA理念是"分析应该在模型选择之前进行。而且我认为这是真的。如果您对您正在处理的内容有更多了解,那么您肯定会有更好的模型选择呼叫
答案 1 :(得分:2)
如果您正在处理一个相当微不足道的模式,其中字母仅基于前一个模式,那么您就会发现隐藏马尔可夫模型(HMM)会解决它 - 实际上是就像Markov Chain一样简单。
如果你想获得一点乐趣,那么这里有一个基于你可以摆弄的HMM的自定义解决方案。
浏览示例数据,并按插入顺序创建每个元素的链接列表。现在为每个不同的字符创建另一个列表,并将每个列表元素的索引放在它所属的位置。这是链接列表的一个(非常糟糕的)可视化表示,以及它下面的桶:
现在,当您看到序列并要求预测下一个字符时,您所要做的就是查看最近的X字符,并查看与其相似的子序列的作用。
要使用上面的示例,请查看最新(最后)3个字符以获取BAC
。你想看看序列BAC
之前是否曾经发生过,以及它发生之后发生了什么。如果您检查存储桶中BAC
的第一个字母(B
),则可以看到字母B
之前出现过一次。值得庆幸的是,它遵循了序列 - 并且A
之后出现了,所以这将是预测。
您可能不仅需要检查过去X的序列,还要检查X以下的每个数字,如果序列匹配,每个数字都会减去重量,以创建更好的启发式。
困难的部分是决定看多远 - 如果你看得太远,它会花费太长时间,你可能不会得到任何匹配。如果你看起来太短,那么你可能会错过一个模式,并且不得不猜测。
祝你好运 - 希望这很好,易于实施,并且适合你。