在大型数据集上训练异常检测模型并选择正确的模型

时间:2020-10-19 09:05:33

标签: machine-learning scikit-learn svm anomaly-detection pycaret

我们正在尝试为应用程序日志建立异常检测模型。

预处理已经完成,我们已经建立了自己的word2vec模型,该模型已在应用程序日志条目上进行了训练。

现在我们有150万行* 100列的训练数据

其中每一行是日志条目的向量化表示(每个向量的长度为100,因此为100列)

问题在于,大多数异常检测算法(LOF,SOS,SOD,SVM)并未针对此数据量进行缩放。我们将训练大小减少到500K,但是这些算法仍然挂起。在POC样本数据上表现最佳的SVM,没有选择让n_jobs在多个内核上运行它。

某些算法能够完成,例如隔离林(n_estimators较低),直方图和聚类。但是这些无法检测到我们有意放入训练数据中的异常。

有人对我们如何对大型数据集运行异常检测算法有想法吗?

在标准异常检测技术中找不到用于批量训练的任何选项。我们可以研究一下神经网络(自动编码器)吗?

选择最佳模型:

鉴于这是无监督学习,我们选择模型的方法如下:

在日志条目训练数据中,插入一本小说的条目(例如《指环王》)。此日志条目的向量表示形式将与其余日志整体不同。

在各种异常检测算法上运行数据集时,请查看哪些算法能够检测到小说中的条目(这是一种异常)。

当我们尝试在非常小的数据集(1000个条目)上运行异常检测时,这种方法起作用了,其中使用Google提供的word2vec模型对日志文件进行了矢量化处理。

这种方法听起来不错吗?我们也欢迎其他想法。鉴于其无监督学习算法,我们不得不输入一个异常条目,然后看看哪个模型能够识别它。

放入的污染比为0.003

1 个答案:

答案 0 :(得分:0)

从您的解释来看,您似乎正在解决新颖性检测问题。新颖性检测问题通常是半监督问题(例外或方法可能有所不同)。

现在,如果您使用批处理,可以解决矩阵尺寸巨大的问题。这可以帮助您-https://scikit-learn.org/0.15/modules/scaling_strategies.html

最后是的,如果您可以使用深度学习,那么可以使用无监督学习或半监督学习(我建议这样做)以更好的方式解决问题。