我们正在尝试为应用程序日志构建异常检测模型。
预处理已经完成,我们已经构建了自己的 word2vec 模型,该模型在应用程序日志条目上进行了训练。
现在我们有一个 150 万行 * 100 列的训练数据
其中每一行是日志条目的向量化表示(每个向量的长度为 100,因此为 100 列)
问题是大多数异常检测算法(LOF、SOS、SOD、SVM)都没有针对这个数据量进行扩展。我们将训练规模减少到 500K,但这些算法仍然挂起。在 POC 样本数据上表现最好的 SVM,没有让 n_jobs 在多个内核上运行它的选项。
一些算法能够完成,例如隔离森林(具有低 n_estimators)、直方图和聚类。但是这些无法检测到我们故意放入训练数据的异常情况。
有人知道我们如何为大型数据集运行异常检测算法吗?
在标准异常检测技术中找不到批量训练的任何选项。我们应该研究一下神经网络(自动编码器)吗?
选择最佳模型:
鉴于这是无监督学习,我们选择模型的方法如下:
在日志条目训练数据中,插入小说中的条目(比如指环王)。此日志条目的向量表示将不同于日志条目的其余部分。
在各种异常检测算法上运行数据集时,查看哪些算法能够检测到小说中的条目(这是异常)。
当我们尝试在一个非常小的数据集(1000 个条目)上运行异常检测时,这种方法很有效,其中日志文件使用 google 提供的 word2vec 模型进行了矢量化。
这种方法合理吗?我们也对其他想法持开放态度。鉴于它是一种无监督学习算法,我们必须输入一个异常条目并查看哪个模型能够识别它。
投入的污染比例为 0.003