比如说,我有一组巨大的数据(无限大),由一个接一个的正弦波和阶跃脉冲组成。我想从我的模型中解析数据序列的顺向或点向,当它第一次解析正弦波并开始面对阶跃脉冲时,作为孤立点提出警告,但当它继续解析数据时,它必须识别交替的正弦脉冲和步进脉冲,并将它们视为正常模式。但是,如果它面临这种趋势之外的某些东西,它必须把它们当作离群点,然而,如果这种新模式不断重复,它必须再次把它们当作正常的。换句话说,我的模型必须在某种程度上“记住”它在过去看到的东西,以预测在不久的将来什么是“正常的”,并在此基础上检测我不断流数据中的异常。
我尝试过实现传统的无状态LSTM来实现我的需求,但是LSTM作为一个监督学习过程需要一个初始的培训,并且总是根据最初给定的数据进行预测。因此,如果它在训练时识别的模式在测试阶段发生了偏差,那么它总是将测试阶段的模式视为一个异常值,而不管它重复了多少次。简单地说,它没有随着时间的推移而更新自己。
我查阅了关于“在线流媒体数据异常检测”的相关论文,发现Numenta实现并在NAB基准测试中实现的HTM是这方面的最佳解决方案,但我正在寻找开源和绝对免费使用的解决方案。
作为这一领域的新手,任何现有的开源实现都将受到高度赞赏,因为从头开始编写一些东西不是首选的,但如果需要的话,这将是我最后的选择。
发布于 2018-11-11 00:46:26
有两种著名的孤立点检测算法:隔离林算法和一类支持向量机算法.您将在Sckikit学习中找到这些实现。
在github上搜索“异常检测”,似乎可以公开获得NAB竞赛的参赛作品。nareshkumar66675 66675/纽伦塔。这一个有一个木星笔记本,主要使用Scikit学习和一些定制,但简单,功能工程。它们可能会达到你的目的。虽然这篇文章的作者没有包含授权信息,但它似乎足够简单,可以重新实现。
然而,据我所知,NAB数据集更多地是“时间序列”检测,也就是说,如果信号与以前/最近的值有很大不同,它就是异常。它没有任何关于数据中模式的概念,即继步进脉冲之后的正弦脉冲,并且不包括随着数据集的大小而学习更大的模式。
我不知道解决你的具体问题的算法,尽管它们很可能存在于文献中。问题中的关键问题是,在您看到足够的数据之前,无法预测长序列是否为异常。它可能会遭受组合爆炸。
问题的正弦和脉冲可以替换为0和1s,所以您的问题是检测字符串中的模式。基因组学与DNA中的模式有关,因此工作主体可能有你所需要的东西。(注意,这与遗传算法有很大不同)
有一套较老的算法,称为市场篮子分析、先验算法或关联集挖掘,具有增加集大小的特点,但不具有异常检测的特点。参见这段视频解释。先验创造了一套共同购买的物品。当您拥有少量的数据时,您只能可靠地创建小的模式。随着数据量的增加,您可以创建更大的模式。
https://datascience.stackexchange.com/questions/41021
复制相似问题