1

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

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

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

如果算法运行良好,我可以将间隔的大小减少到例如 5 分钟。

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

4

1 回答 1

1

我不得不说找到异常值的策略很好,但你需要注意几个步骤。首先,使用每 5 分钟的所有事件为事件创建一个新的质心。我认为塔哈特可能不是一个好主意。

因为使用过多的质心,您可能很难找到异常值,而这正是您不想要的。

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

  1. 为您的 K-means 找到合适的 K 数。

    这一点非常重要,如果你有太多或太少,你可能会对现实做出不好的表示。所以选择一个好的K
  2. 拿一个好的训练集

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

    您需要测试它是否工作正常。你有什么奇怪的例子吗?你有一套你现在并不奇怪。看看它是否正常工作。为了帮助它,您可以使用交叉验证

那么,你的idea好不好?是的!它可以工作,但请确保不要在集群中过度工作。当然,您可以利用每天的数据集来训练更多模型。但是让这个过程每天一次找到质心。并让欧几里得距离方法找出你的组中有什么或没有什么。

我希望我对你有所帮助!

于 2016-07-13T23:11:23.690 回答