1

我有一個數據管道系統,所有事件都存儲在Apache Kafka中。有一個事件處理層,它會消耗並轉換該數據(時間序列),然後將結果數據集存儲到Apache Cassandra中。K-Means使用Apache Spark的時間序列數據

現在我想使用Apache Spark來訓練一些機器學習模型以進行異常檢測。我們的想法是在過去的數據上運行k-means算法,例如一天中的每一小時。

例如,我可以從下午4點到5點選擇所有事件併爲該時間間隔建立一個模型。如果我應用這種方法,我會得到完全24個模型(每一個小時的質心)。

如果算法運行良好,我可以減少我的間隔的大小,例如5分鐘。

這是對時間序列數據進行異常檢測的好方法嗎?

回答

1

我不得不說這個策略很好找到Outliers但你需要照顧幾個步驟。首先,使用每5分鐘的所有事件爲事件創建一個新的Centroid。我認爲tahat可能不是一個好主意。

因爲使用太多的質心,你可以很難找到離羣值,這就是你不想要的。

讓我們看到一個很好的策略:

  1. 查找您的K-手段相當數量的鉀。

    對於這一點非常重要,如果你有太多或太少,你可以對現實做出不好的表示。因此,選擇一個good K
  2. 走好訓練集

    所以,你不需要使用所有的數據來創建一個模型每次和每一天。你應該舉一個你平常的例子。你不需要採取不正常的事情,因爲這是你想找到的。所以用這個來創建你的模型,然後找到集羣。
  3. 測試它!

    您需要測試它是否工作正常。你有什麼奇怪的例子嗎?你有一套你現在不奇怪。請檢查它是否正常工作。爲了幫助它,你可以使用Cross Validation

那麼,你的想法是好的嗎?是!它可以工作,但一定不要在羣集中工作。當然,你可以把你每天的數據集用來訓練更多的模型。但是讓這個過程每天找一次質心。然後讓Euclidian distance方法找到你的組中有或沒有。

我希望我幫你!

相關問題