我刚开始学习机器学习,所以希望您能对这个问题宽容一点。
我有一串观测到的字符序列,例如ABABBABBB......(n个字符)。我的目标是通过某种“学习”机制来预测下一个字符。但限制是:训练数据即观测到的字符数量不多。换言之,我只有一段长度为6000的序列,用于学习其中的潜在规律。
我对解决这个问题的策略感到相当困惑,我的初步想法是: 1)使用N元模型? 2)神经网络(如LSTM等)? 3)隐马尔科夫模型(HMMs)?
请问您可以指导正确的解决方案吗?
我刚开始学习机器学习,所以希望您能对这个问题宽容一点。
我有一串观测到的字符序列,例如ABABBABBB......(n个字符)。我的目标是通过某种“学习”机制来预测下一个字符。但限制是:训练数据即观测到的字符数量不多。换言之,我只有一段长度为6000的序列,用于学习其中的潜在规律。
我对解决这个问题的策略感到相当困惑,我的初步想法是: 1)使用N元模型? 2)神经网络(如LSTM等)? 3)隐马尔科夫模型(HMMs)?
请问您可以指导正确的解决方案吗?
你可能不仅想要检查过去 X 个序列,还想检查小于 X 的每个数字,如果序列匹配,则给每个数字赋予较小的权重,以创建更好的启发式。
困难的部分是决定往前看多远-如果看得太远,会花费太长时间,你可能无法获得任何匹配。 如果看得太短,则可能会错过一些模式,不得不猜测。
祝你好运-希望这很容易实现,并且对你有效。
我会从为字符分配数字开始(A-> 1,B-> 2等)。通常不建议将名义变量(没有顺序的值)转换为有序变量(2比1大,但“C”是否比“A”或“红色”比“绿色”更大?!),但在这种情况下,这将把您的问题转化为绝对时间序列分析。
然后,我会利用一些常规的EDA方法,例如4-plot或autocorrelation分析。这将告诉您许多关于数据的统计行为,例如“数据的平均值是否在变化?”或“数据集可能有多少随机性?”之后,您可能会更好地决定使用哪种机器学习算法
根据您在EDA分析中发现的内容,您可以继续实施ML算法。如果您具有高度相关的数据(从自相关图中看出),那么您可能会选择滑动窗口方法进行特征选择,即假设每个值都取决于前k个值(x_k = f(x_(k-1),x_(k-2),...,x_(k-m))
)。通过分析自相关图,可以选择“m”的值。如果您具有移动平均值,则最好先学习平均曲线,然后再学习每个实例与其平均值的偏移量。如果您在平均曲线或实例偏移量中感觉到某种程度的随机性,则可能希望通过预测问题选择随机方法。
通常,EDA的理念是“在模型选择之前应进行分析”,我认为这是正确的。如果您更了解正在处理的内容,则肯定会更好地进行模型选择。
遗传算法可能是一个解决方案。 它通过通配符替换字母来创建分类器。 由于分类器应该具有给定的长度,因此您选择最后N个字符。 例如(N-= 4):ABBACDC ->“ACDC”,一个分类器示例可以是“A ** C”。 为了测试它,对于一个好的程序员来说,速度可能相当快,结果可能令人惊讶。