16

我正在寻找一种算法或示例材料来研究基于已知模式预测未来事件。也许有一个名字,我只是不知道/不记得它。这个一般的东西可能不存在,但我不是数学或算法大师,所以我在这里问方向。

一个例子,据我了解,它会是这样的:

静态事件发生在 1 月 1 日、2 月 1 日、3 月 3 日、4 月 4 日。一个简单的解决方案是平均每次出现之间的天数/小时/分钟/某事,将该数字添加到最后一次已知的事件中,并进行预测。

我要求什么,或者我应该学习什么?

心中没有特定的目标,也没有要考虑的任何特定变量。这只是个人的想法,也是我学习新东西的机会。

4

8 回答 8

8

我认为一些可能值得研究的主题包括数值分析,特别是插值、外推和回归

于 2009-04-16T21:26:01.283 回答
4

这可能是矫枉过正,但马尔可夫链可以导致一些非常酷的模式识别的东西。它更适合,嗯,事件链:这个想法是,基于事件链中的最后 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])
于 2009-04-16T21:40:28.487 回答
2

没有单一的“最佳”罐头解决方案,这取决于您的需求。例如,您可能希望按您所说的对值进行平均,但使用加权平均值,旧值对结果的贡献不如新值。或者你可以尝试一些平滑。或者您可能会尝试查看事件的分布是否符合众所周知的分布(如正态分布、泊松分布、均匀分布)。

于 2009-04-16T21:22:43.193 回答
2

如果您有一个模型(例如事件定期发生),那么将卡尔曼滤波器应用于该模型的参数是一种常用技术。

于 2009-04-16T21:43:00.320 回答
1

我尝试做类似事情的唯一技术是训练神经网络来预测该系列的下一步。这意味着将问题解释为模式分类中的问题,这似乎不太合适;我不得不怀疑处理它的方式不那么模糊。

于 2009-04-16T21:08:52.010 回答
1

该任务与语言建模任务非常相似,在给定一系列历史单词的情况下,模型试图预测下一个单词在词汇表上的概率分布。

有诸如SRILMNLTK之类的开源软件可以简单地将您的序列作为输入句子(每个 event_id 是一个单词)并完成工作。

于 2016-09-08T04:00:09.360 回答
0

如果您只想在给定频率的先前数据的情况下找到事件在 n 天后发生的概率,您需要拟合适当的概率分布,这通常需要了解事件的来源(也许应该是泊松分布,也许是高斯分布)。如果您想在给定先前事件发生的情况下找到事件发生的概率,您将需要查看贝叶斯统计数据以及如何从中构建马尔可夫链。

于 2009-04-16T21:41:32.837 回答
-2

你应该谷歌遗传编程算法

它们(有点像 Chaos 提到的神经网络)将使您能够以编程方式生成解决方案,然后让程序根据标准修改自身,并创建希望更接近准确的新解决方案。

神经网络必须由你训练,但通过基因编程,程序将完成所有工作。

尽管首先要让它们运行是一项艰巨的工作!

于 2009-04-16T21:27:37.660 回答