我正在寻找一种算法或示例材料来研究基于已知模式预测未来事件。也许有一个名字,我只是不知道/记住它。这种一般性的东西可能不存在,但我不是数学或算法的大师,所以我在这里要求方向。
一个例子,据我所知,它会是这样的:
静态事件发生在1月1日,2月1日,3月3日,4月4日。一个简单的解决方案是平均每次出现之间的天/小时/分钟/某事,将该数字添加到最后一次已知的事件,并进行预测。
我要求的是什么,或者我应该学习什么?
没有特别的目标,或任何特定的变量需要考虑。这只是个人思想,也是我学习新事物的机会。
答案 0 :(得分:8)
我认为可能值得研究的一些主题包括numerical analysis,特别是interpolation, extrapolation, and regression。
答案 1 :(得分:4)
这可能有点矫枉过正,但是Markov chains会导致一些非常酷的模式识别。它更适合于事件链:根据一系列事件的最后N个步骤,这个想法是下一步会发生什么?
这非常适合文字:处理莎士比亚的大样本,你可以生成充满莎士比亚般的废话的段落!不幸的是,它需要更多的数据才能找出人口稀少的事件。 (检测一个月或更长时间的模式需要您跟踪至少整整一个月的数据链。)
在伪python中,这是马尔可夫链构建器/预测脚本的草图:
n = how_big_a_chain_you_want
def build_map(eventChain):
map = defaultdict(list)
for events in get_all_n_plus_1_item_slices_of(eventChain):
slice = events[:n]
last = events[-1]
map[slice].append(last)
def predict_next_event(whatsHappenedSoFar, map):
slice = whatsHappenedSoFar[-n:]
return random_choice(map[slice])
答案 2 :(得分:2)
没有单一的“最佳”固定解决方案,这取决于您的需求。例如,您可能希望按照您所说的平均值,但使用加权平均值,其中旧值对结果的贡献不如新值。或者你可以尝试一些平滑。或者你可能会试着看看事件的分布是否符合一个很好的分布(正常,泊松,均匀)。
答案 3 :(得分:2)
如果您考虑到模型(例如定期发生事件),那么将卡尔曼滤波器应用于该模型的参数是一种常用技术。
答案 4 :(得分:1)
我尝试做类似事情的唯一技术就是训练神经网络来预测系列的下一步。这意味着将问题解释为模式分类中的一个问题,这似乎不太合适;我不得不怀疑处理它的方法不那么模糊。
答案 5 :(得分:0)
如果您只是想在事件发生频率的先前数据n天之后找到事件发生的概率,那么您需要适合合适的概率分布,这通常需要了解事件的来源(也许它应该是泊松分布的,也许是高斯分布的)。如果你想在事先发生事件的情况下找到事件发生的可能性,你会想要查看贝叶斯统计数据以及如何从中建立马尔可夫链。
答案 6 :(得分:0)
该任务与语言建模任务非常相似,其中给定一系列历史单词,模型试图预测下一个单词的词汇概率分布。
有一些开源软件,例如SRILM和NLTK,可以简单地将您的序列作为输入句子(每个event_id都是一个单词)并完成工作。
答案 7 :(得分:-2)
你应该谷歌Genetic Programming Algorithms
它们(有点像Chaos提到的神经网络)将使您能够以编程方式生成解决方案,然后让程序根据标准进行自我修改,并创建有望接近准确的新解决方案。
神经网络必须由您进行培训,但通过遗传编程,该计划将完成所有工作。
虽然让它们在第一时间运行是一项很多工作!