2017-07-31 57 views
1

我正在處理流式數據(使用Java和Apache Flink),我想執行異常值檢測。我有一個網絡,每個傳感器接收流。 然後,他們將其流的採樣版本發送到組合所有樣本並生成全局模型的「領導者」節點。基於模型的增量式異常值檢測

之後,它將全局模型發送給每個孩子。孩子們將使用這個模型來檢測異常值。 這必須以連續的方式發生(即每次領導者接收x個樣本時,其更新模型並廣播它)。

我發現的論文/方法遇到的問題是,爲了構建模型,我需要擁有所有數據,這是不可能的。領導者也不可能存儲它收到的所有樣本。

我寫了一個小例子:

傳感器A接收到一些數據並將其發送到領導

傳感器B接收的一些數據並將其發送到領導

領域的領導者使用收到值來構建廣播的模型。

兩個傳感器接收其他數據,對於每個值,他們使用接收到的模型執行異常值檢測。 然後他們將新數據發送給領導。

領導者更新模型並將新的更新模型發送給子女。

我可以使用哪種方法來獲得這樣的行爲?

回答

0

解決這個問題的方法是讓領導將模型更新寫入Kafka主題,並讓A和B讀取來自Kafka的模型更新(除傳感器流之外)。

更新:

一個相當簡單的算法,用於檢測孤立點/異常那是非常適合於流是叔消化(是的,它的工作原理增量)。 This page from mapr會帶你到更多的信息。

+0

是的,我完全是這樣做的。我在問你是否知道任何可用於此目的的異常值檢測模型。特別是,應該可以逐步更新模型。 – LizardKing

+0

我已經更新了我的上面的答案,建議使用t-digest。 –

+0

謝謝!我一直在研究t-digest,但它似乎用於計算閾值(http://koff.io/posts/using-t-digest/)。我不知道如何在我的數據流中使用它來找出異常,根據我的理解,我應該使用一個模型,然後使用t-digest給出的閾值(如本項目https:// github .com/pollo/anomaly_detection/blob/master/src/main/java/org/apache/mahout/anomalydetection/EKGAnomalyDetection.java,但問題在於該模型不可序列化並且不能逐步運行)。 – LizardKing