【问题标题】:Incremental model-based Outlier detection基于增量模型的异常值检测
【发布时间】:2017-07-31 10:32:12
【问题描述】:

我正在处理流数据(使用 Java 和 Apache Flink),我想执行异常值检测。我有一个网络,每个传感器都接收一个流。 然后他们将流的采样版本发送到“领导”节点,该节点组合所有样本并生成全局模型。

之后,它将全局模型发送给每个孩子。孩子们将使用这个模型来检测异常值。 这必须以连续的方式发生(即每次领导者收到 x 个样本时,它都会更新模型并广播它)。

我发现的论文/方法遇到的问题是,为了构建模型,我需要拥有所有数据,而这是不可能的。领导者存储它收到的所有样本也是不可行的。

我正在写一个小例子:

传感器 A 接收到一些数据并发送给领导者

传感器 B 接收到一些数据并发送给领导者

Leader 使用接收到的值来构建广播的模型。

两个传感器接收其他数据,对于每个值,它们使用接收到的模型来执行异常值检测。 然后他们将新数据发送给领导者。

领导者更新模型并将新更新的模型发送给孩子。

我可以使用哪种方法来获得这种行为?

【问题讨论】:

    标签: java apache-flink outliers


    【解决方案1】:

    一种方法是让领导者将模型更新写入 Kafka 主题,并让 A 和 B 从 Kafka 读取这些模型更新(除了他们的传感器流)。

    更新:

    用于检测非常适合流的异常值/异常的一种相当简单的算法是 t-digest(是的,它以增量方式工作)。 This page from mapr 将引导您了解更多信息。

    【讨论】:

    • 是的,我就是这样做的。我在问您是否知道我可以用于此目的的异常值检测模型。特别是,应该可以增量更新模型。
    • 我已经更新了上面的答案,建议使用 t-digest。
    • 谢谢!我一直在研究 t-digest,但它似乎用于计算阈值(koff.io/posts/using-t-digest)。我不知道如何在我的数据流中使用它来找出异常,据我了解,我应该使用一个模型,然后使用 t-digest 给出的阈值(如在这个项目中github.com/pollo/anomaly_detection/blob/master/src/main/java/…,但是这里的问题是模型不可序列化并且不能增量工作)。
    • 看看 Ted Dunning 的实现:github.com/tdunning/t-digest/blob/master/src/main/java/com/… 我很确定它既可以序列化,也可以增量使用。
    猜你喜欢
    • 2013-06-11
    • 2020-10-22
    • 2014-05-13
    • 2012-10-30
    • 2022-10-08
    • 2020-06-02
    • 2019-07-24
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多