K-Means与Apache Spark的时间序列数据

时间:2016-07-13 16:02:29

标签: algorithm apache-spark k-means apache-spark-mllib anomaly-detection

我有一个数据管道系统,所有事件都存储在Apache Kafka中。有一个事件处理层,它使用和转换该数据(时间序列),然后将结果数据集存储到Apache Cassandra中。

现在我想使用Apache Spark来训练一些用于异常检测的机器学习模型。这个想法是对过去的数据运行k-means算法,例如每天一小时。

例如,我可以从下午4点到下午5点选择所有事件并为该间隔构建模型。如果我应用这种方法,我将获得24个模型(每一小时的质心)。

如果算法运行良好,我可以将间隔的大小缩短为例如5分钟。

对时间序列数据进行异常检测是一种好方法吗?

1 个答案:

答案 0 :(得分:1)

我不得不说找到Outliers的策略很好但你需要处理几个步骤。首先,使用每5分钟的所有事件为事件创建新的Centroid。我认为tahat可能不是一个好主意。

因为使用了太多的质心,你很难找到异常值,这就是你不想要的。

所以让我们看一个好的策略:

  1. 为您的K-means找到一个很好的K.

    这对此非常重要,如果你有太多或太少,你可以对现实做出错误的表述。因此,请选择good K
  2. 参加一个好的训练集

    因此,您不需要每天都使用所有数据来创建模型。你应该举例说明你的正常情况。你不需要采取不正常的东西,因为这是你想要找到的东西。因此,使用它来创建模型,然后找到Clusters。
  3. 测试一下!

    您需要测试它是否正常工作。你有什么例子,你看到的是奇怪的吗?你有一套你现在并不奇怪的东西。检查一下它是否正常工作。为了帮助您,您可以使用Cross Validation
  4. 那么,你的想法很好吗?是!它可以工作,但请确保不要在群集中工作。当然,您可以使用每天的数据集来训练更多的模型。但是这个过程每天要找一次质心。让Euclidian distance方法查找您的群组中的内容。

    我希望我能帮到你!