精华内容
下载资源
问答
  • 异常检测算法
    千次阅读
    2020-08-27 09:28:23

    图像 异常检测算法

    Modern applications are generating enormous amounts of image data. And in the last years, researches began to apply some data mining algorithms to extract useful information from these images to apply smart decisions in business, to detect harmful situations in medicine, to understand behavioral patterns for people, and much more.

    现代应用程序正在生成大量图像数据。 在过去的几年中,研究开始应用一些数据挖掘算法来从这些图像中提取有用的信息,以将明智的决策应用于业务,检测医学中的有害情况,了解人们的行为模式等等。

    Detecting anomalies play a very important role in data mining which raises suspicions while these outliers most of the time differs a lot from the rest of the majority of images. The purpose of this article is to give a state of the art overview of this topic and give some real examples using two famous algorithms.

    检测异常在数据挖掘中起着非常重要的作用,这引起了人们的怀疑,而这些异常值在大多数情况下与大多数其他图像有很大不同。 本文的目的是提供有关此主题的最新技术概述,并使用两种著名的算法给出一些实际示例。

    检测图像中的离群值 (Detecting outliers in images)

    Detecting outliers in images is not an easy task, and can’t be done efficiently using some famous outlier detection algorithms. Like it will be too hard to detect outlier images using statistical methods like the Z-Score algorithm or Boxplots. While the DBScan clustering algorithm designed when the distribution of values in the feature space cannot be assumed, but applying that algorithm for this application is not clear forward. So the idea is not to choose an algorithm rather than see how to frame the problem correctly then choose one of the algorithms that suit that frame.

    检测图像中的离群值不是一件容易的事,并且无法使用某些著名的离群值检测算法来有效地完成。 就像使用Z-Score算法或Boxplots之类的统计方法来检测离群值图像将太困难了。 虽然无法假定DBScan集群算法是在无法假定值在特征空间中的分布时设计的,但尚不清楚该算法在该应用程序中的应用。 因此,这个想法不是选择一种算法,而是看如何正确地解决问题,然后选择一种适合该框架的算法。

    Here is a very good article about anomalies detection in common:

    这是一篇关于常见异常检测的非常好的文章:

    Machine learning researchers have created algorithms such as Isolation forest, one-class SVMs, local outlier factor to detect outliers in images. In the next paper with the title “Anomaly Detection Using Similarity-based One-Class SVM for Network Traffic Characterization”:

    机器学习研究人员创建了诸如隔离森林一类SVM局部离群值因素之 类的算法来检测图像中的离群值。 在下一篇标题为“ 使用基于相似性的一类SVM进行网络流量表征的异常检测 ”的文章中:

    https://www.researchgate.net/publication/331257012_Anomaly_Detection_Using_Similarity-based_One-Class_SVM_for_Network_Traffic_Characterization

    https://www.researchgate.net/publication/331257012_Anomaly_Detection_Using_Similarity-based_One-Class_SVM_for_Network_Traffic_Characterization

    The writers tried to apply One-Class SVM in detecting malicious activities in car traffic in real-time, and real-time was a big challenge for their system while they weren’t studying the efficient of their algorithm rather than detecting the cases that the network administrators should give attention to and label that behaviors (Normal — Abnormal — Critical).

    作者试图将一类支持向量机(SVM)用于实时检测汽车交通中的恶意活动,而实时性对他们的系统来说是一个巨大的挑战,因为他们没有研究算法的效率,而不是检测出网络管理员应注意并标记该行为(正常-异常-严重)。

    Isolation forest (iForest) is another effective method in detecting outliers, Fei Tony Liu and Kai Ming Ting in their paper Isolation-based Anomaly Detection discussed the details of this algorithm:

    隔离林(iForest)是检测异常值的另一种有效方法, Fei Tony Liu和Kai Ming Ting在他们的基于隔离的异常检测中讨论了该算法的细节

    And we will talk more about this efficient way of detecting anomalies.

    我们将更多地讨论这种检测异常的有效方法。

    Some people recently tried to apply deep learning techniques to detect anomalies in images, the idea behind that turn around autoencoders neural networks where the encoder accepts the input data, compress it into the latent-space representation. Then the decoder will reconstruct the input data from that space. When training the hidden layers have been taught of de-noising the input data and here is the key to detecting anomalies. When we apply that network on anomaly images the reconstructed image will have a high mean-squared-error (MSE) since the autoencoders have never seen that sample of data before. While it’s a new and effective way to detect anomalies but it has some negative sides like we should choose the MSE threshold and the network should be trained on a specific class of data and anomalies should be completely a different class so it can be detected as an anomaly.

    最近有人尝试应用深度学习技术来检测图像中的异常现象,其背后的想法是绕过自动编码器神经网络,在该网络中,编码器接受输入数据,并将其压缩为潜伏空间表示。 然后,解码器将从该空间重构输入数据。 训练隐层时,已经教过如何对输入数据进行消噪,这是检测异常的关键。 当我们将该网络应用于异常图像时,由于自动编码器之前从未见过该数据样本,因此重构图像将具有较高的均方误差(MSE)。 尽管这是检测异常的一种新的有效方法,但它具有一些负面影响,例如我们应该选择MSE阈值,并且应该对网络上的特定类别的数据进行训练,而异常应该是完全不同的类别,因此可以将其检测为异常。异常。

    If you want to try that in the next link you will find a very interesting demo:

    如果您想在下一个链接中尝试,您将找到一个非常有趣的演示:

    Some papers discussed the use of Generative Adversarial Networks in detecting anomalies in images:

    一些论文讨论了生成对抗网络在检测图像异常中的使用:

    http://link-springer-com-443.webvpn.fjmu.edu.cn/chapter/10.1007%2F978-3-030-10925-7_1

    http://link-springer-com-443.webvpn.fjmu.edu.cn/chapter/10.1007%2F978-3-030-10925-7_1

    They were searching for a good representation of the sample in the latent space of the generator like the concept discussed before in deep learning. While they achieved state-of-the-art performance on standard image benchmark datasets, but again we have the same negative points discussed in deep learning where it’s deeply related to the training phase and the main class nature and features.

    他们正在寻找生成器潜在空间中样本的良好表示形式,就像之前在深度学习中讨论的概念一样。 尽管他们在标准图像基准数据集上取得了最先进的性能,但是在深度学习中,我们同样遇到了同样的缺点,它与训练阶段以及主要课程的性质和功能密切相关。

    隔离林 (Isolation forest)

    Also, known as “iForest” algorithm. It’s using Binary trees for separating groups of points using a random threshold applied on a random feature space until we reach the leaves with only one point in each. And then generate multiple trees on each group of samples to get a forest of trees where the score of a point is its path length averaged across the trees of the forest.

    也称为“ iForest”算法。 它使用二叉树通过在随机特征空间上应用随机阈值来分离点组,直到我们到达每个只有一个点的叶子为止。 然后在每组样本上生成多棵树,以得到一个森林树,其中一个点的分数是其在森林树之间平均的路径长度。

    Briefly, by using this algorithm, we will keep partitioning the dataset until each point will be alone, outliers points will be partitioned in the earlier stages of running the algorithm while normal points will require more partitions to be isolated. Each partition is randomly generated, individual trees are generated with different sets of partitions.

    简而言之,通过使用该算法, 我们将继续对数据集进行分区,直到每个点都单独存在 ,在运行算法的早期阶段,将对离群点进行分区,而对正常点则需要进行更多分区。 每个分区都是随机生成的单个树是用不同的分区集生成的

    Image for post
    Taken from Isolation-based Anomaly Detection publication
    摘自基于隔离的异常检测出版物

    We can see clearly from the images that X0 (Anomaly point) will be partitioned faster than Xi (Normal point).

    从图像中我们可以清楚地看到,X0(异常点)的分割速度比Xi(正常点)的分割速度快。

    Isolation forest’s basic principle is that outliers are few and far from the rest of the observations. After generating the trees there is a specific formula to score each point, this formula as next:

    隔离林的基本原理是离群值很少且与其余观测值相距甚远。 生成树后,有一个特定的公式可以为每个点评分,该公式如下:

    Image for post

    Where:

    哪里:

    • h(x) the path length

      h(x)路径长度
    • E(h(x)) is the average of h(x) from a collection of Isolation trees

      E(h(x))是来自隔离树集合的h(x)的平均值
    • c(n) the unsuccessful length search of binary tree

      c(n)二叉树的长度搜索不成功
    • N number of external nodes

      N个外部节点

    So when the score is near 1, that means the point is an outlier. If the score is too low that means it’s a normal point. Usually, we should not get values around 0.5 or that means either the generation or picking the features was not so good or there are no outliers in the distribution.

    因此,当分数接近1时,表示该点是离群值如果分数太低,则表示这是正常点。 通常,我们不应该获得约0.5的值,否则意味着生成或挑选要素的质量不太好,或者分布中没有异常值。

    Isolation forest is characterized by the lack of the need of scaling the values in the feature space, is an effective method when value distributions cannot be assumed, has few parameters, this makes this method fairly robust and easy to optimize, well suited for streaming data and works great with very high dimensional datasets.

    隔离林的特点是无需缩放特征空间中的值 ,是一种无法假设值分布的有效方法参数很少 ,这使该方法相当健壮且易于优化, 非常适合流数据并且非常适合高维数据集

    For more details about the algorithm check out its publication:

    有关该算法的更多详细信息,请查看其出版物:

    I wrote a code that will fetch a class of images and generate forests for this class.

    我写了一段代码,将获取一类图像并为该类生成森林。

    I already implemented that code after reading the next article:

    阅读下一篇文章后,我已经实现了该代码:

    It was a very useful article to give an introduction about anomaly detection using the Isolation Forest algorithm.

    这是一篇非常有用的文章,对使用隔离林算法进行异常检测进行了介绍。

    I used the same datasets of the next paper:

    我使用了下一篇论文的相同数据集:

    You can download the images under the “8 Scene Categories Dataset” section.

    您可以在“ 8个场景类别数据集”部分下下载图像。

    健壮的随机砍伐森林 (Robust Random Cut Forest)

    Also, known as “RRCF” algorithm is an unsupervised algorithm for detecting anomalies designed by Sudipto Guha, Nina Mishra, Gourav Roy, and Gourav Roy:

    同样,被称为“ RRCF”算法的是由Sudipto Guha,Nina Mishra,Gourav Roy和Gourav Roy设计的用于检测异常的无监督算法:

    This is proven in their work that it's superior to the Isolation forest algorithm in detecting anomalies in common especially in real-time streams. It works like iForest exactly. But the only difference here is that it’s not fully random. The probability of a dimension being chosen is proportional to the spread of the data on that dimension using the next formula:

    他们的工作证明, 在检测常见异常(尤其是实时流)方面, 它优于隔离林算法 。 就像iForest一样。 但是这里唯一的区别是它不是完全随机的 。 使用下一个公式,选择维的概率与该维上数据的分布成比例

    Image for post

    The score is different though but follows the same principle: high score = anomaly, low score normal point. So in this algorithm, the added values compared to iForest are:

    分数虽然不同,但遵循相同的原理:高分=异常,低分正常。 因此,在此算法中,与iForest相比的增加值是:

    • The effective construction of the trees with stream data

      利用流数据有效构建树

    • The handling of irrelevant dimensions

      不相关尺寸的处理

    Also, I wrote a version of my last code using this algorithm:

    另外,我使用此算法编写了最后一个代码的版本:

    摘要 (Summary)

    After testing I didn't actually get very good results in detecting anomalies but got a very good performance in either training or testing. I think the reasons behind that are:

    经过测试之后,我在检测异常方面实际上没有获得很好的结果,但是在培训或测试方面都获得了很好的表现。 我认为其背后的原因是:

    • I used a small dataset for training

      我使用了一个小的数据集进行训练
    • I should model my problem better, so using only the HSV color space histogram as an input may not be enough info, especially that there may be a lot of overlapping in images colors between different scenes

      我应该对问题进行更好的建模,因此仅使用HSV色彩空间直方图作为输入信息可能不够,尤其是不同场景之间的图像色彩可能存在很多重叠

    But I believe that these algorithms are so effective for basic anomalies detection in different other fields, especially when you don’t want to get into the neural networks and their complexities. But always the best way is to model your problem first and decide your inputs, and according to your analysis, you can find the best solution.

    但是我相信这些算法对于其他领域的基本异常检测非常有效,尤其是当您不想进入神经网络及其复杂性时。 但是,最好的方法始终是首先对问题建模,并确定您的投入,然后根据您的分析,找到最佳解决方案。

    This is just a quick state of the art article to save you time searching on the internet about these topics, and give you a quick boost with iForest and RRCF algorithms.

    这只是一篇最新的技术文章,可节省您在Internet上搜索这些主题的时间,并借助iForest和RRCF算法快速为您提供帮助

    I am still continuing to research more about detecting anomalies but in networks and I will post more articles about that in the future.

    我仍在继续研究更多有关检测异常的方法,但是在网络中,以后我会发布更多有关此问题的文章。

    翻译自: https://medium.com/@a.mhaish/algorithms-to-detect-anomalies-in-images-56a1793eba56

    图像 异常检测算法

    更多相关内容
  • 基于python与PCA的异常检测算法设计与实现
  • 针对这个问题,提出含自适应阈值的ARMA网络流量异常检测算法,利用滑动平均模型预测网络流量,利用中心极限定理确定动态的阈值区间,通过判断网络流量误差是否落在阈值区间作为检测点是否异常的准则。仿真结果表明,该...
  • 提出了一种基于时间序列的模式表示提取时间序列异常值的异常检测算法(PREOV)。时间序列的模式表示本身就具有压缩数据、保持时间序列基本形态的功能,并且具有一定的除噪能力。在时间序列模式表示的基础上提取异常...
  • 针对现有的高光谱图像异常检测算法大多只注重挖掘目标与背景光谱上的差异, 而忽略二者在空间结构上的差异, 导致检测结果不佳的问题, 提出了一种基于空谱联合的异常检测算法。为保留图像的空间结构信息, 所提算法逐...
  • 针对协同表示的高光谱图像异常检测算法中双窗口中心为异常像元且背景字典存在同种异常像元的情况,中心像元的输出较小,难以与背景区分的问题,提出一种改进协同表示的高光谱图像异常检测算法。为了减小背景字典中...
  • 异常检测算法

    千次阅读 2021-10-24 19:41:14
    异常检测算法分类及经典模型概览 - 知乎 维基百科:在数据挖掘中,异常检测(英语:anomaly detection)对不符合预期模式或数据集中其他项目的项目、事件或观测值的识别。 通常异常项目会转变成银行欺诈、结构缺陷...

    异常检测算法分类及经典模型概览 - 知乎

    维基百科:在数据挖掘中,异常检测(英语:anomaly detection)对不符合预期模式或数据集中其他项目的项目、事件或观测值的识别。 通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。 异常也被称为离群值、新奇、噪声、偏差和例外。 异常检测是指在数据中发现不符合预期行为模式的数据的问题

    异常检测(Anomaly Detection 或 Outlier Detection)指的是通过数据挖掘手段识别数据中的“异常点”,常见的应用场景包括:

    金融领域:从金融数据中识别”欺诈案例“,如识别信用卡申请欺诈、虚假信贷等;
    网络安全:从流量数据中找出”入侵者“,并识别新的网络入侵模式;
    电商领域:从交易数据中识别”恶意买家“,如羊毛党、恶意刷屏团伙;
    生态灾难预警:基于对风速、降雨量、气温等指标的预测,判断未来可能出现的极端天气;
    工业界:可通过异常检测手段进行工业产品的瑕疵检测,代替人眼进行测量和判断。

    异常点有哪几种类型?

    • 单点异常(Global Outliers):也可以称为全局异常,即某个点与全局大多数点都不一样,那么这个点构成了单点异常。
    • 上下文异常(Contextual Outliers):这类异常多为时间序列数据中的异常,即某个时间点的表现与前后时间段内存在较大的差异,那么该异常为一个上下文异常点。例如,在某个温带城市夏天的气温时序数据中,其中有一天温度为10℃,而前后的气温都在25-35℃的范围,那么这一天的气温就可以说是一个上下文异常。
    • 集体异常(Collective Outliers):这类异常是由多个对象组合构成的,即单独看某个个体可能并不存在异常,但这些个体同时出现,则构成了一种异常。集体异常可能存在多种组成方式,可能是由若干个单点组成的,也可能由几个序列组成。想象这样一个场景,某小区某天有一户人家搬家了,这是一件很正常的事,但如果同一天有10户同时搬家了,那就构成了集体异常,显然这不是一个正常小区会时常发生的事情。 

    在异常检测中经常遇到哪些困难?

    1. 在大多数实际的场景中,数据本身是没有标签的,也存在一些数据集有标签,但标签的可信度非常低,导致放入模型后效果很差,这就导致我们无法直接使用一些成熟的有监督学习方法。
    2. 常常存在噪音和异常点混杂在一起的情况,难以区分。
    3. 在一些欺诈检测的场景中,多种诈骗数据都混在一起,很难区分不同类型的诈骗,因为我们也不了解每种诈骗的具体定义。

    目前比较常用的手段是,将无监督学习方法和专家经验相结合基于无监督学习得到检测结果,并让领域专家基于检测结果给出反馈,以便于我们及时调整模型,反复进行迭代,最终得到一个越来越准确的模型。

    到这里,我们都发现了,很多风控场景中最重要的一环就是:专家经验

    异常检测算法的分类:

    • 时序相关 VS 时序独立
    • 全局检测 VS 局部检测
    • 输出形式:标签 VS 异常分数
    • 根据不同的模型特征

    时序相关 VS 时序独立

    首先可以根据该场景的异常是否与时间维度相关。在时序相关问题中,我们假设异常的发生与时间的变化相关,比如一个人平时的信用卡消费约为每月5000元,但11月的消费达到了10000元,那这种异常的出现就明显与时间维度相关,可能是因为”万恶“的双十一。

    而在时序独立问题中,我们假设时间的变化对异常是否发生是无影响的,在后续的分析建模中,也就不会代入时间维度。

    全局检测 VS 局部检测

    在全局检测方法中,针对每个点进行检测时,是以其余全部点作为参考对象的,其基本假设是正常点的分布很集中,而异常点分布在离集中区域较远的地方。这类方法的缺点是,在针对每个点进行检测时,其他的异常点也在参考集内,这可能会导致结果可能存在一定偏差。

    而局部检测方法仅以部分点组成的子集作为参考对象,基于的假设是,正常点中可能存在多种不同的模式,与这些模式均不同的少数点为异常点。该类方法在使用过程中的缺点是,参考子集的选取比较困难。

    输出形式:标签 VS 异常分数

    这种分类方式是根据模型的输出形式,即直接输出标签还是异常分数。输出标签的方法比较简单直观,可以直接根据模型输出的结果判断每个点是否为异常点。

    使用可以输出异常得分的模型,我们可以进一步看哪些点的异常程度更高,也可以根据需要设定阈值,比如设定百分比,找出异常程度排在前10%的异常点。

    根据不同的模型特征

    最后,还可以根据模型本身的特点进行分类,大致可以分为以下几种:

    • 统计检验方法
    • 基于深度的方法
    • 基于偏差的方法
    • 基于距离的方法
    • 基于密度的方法
    • 深度学习方法

    ****************************************************************************************************************************************************************

    26.异常检测---孤立森林 | one-class SVM - nxf_rabbit75 - 博客园

    常见的算法:概率与极值分析(假设数据分布并找到超过中心特定范围的数据),线性模型(如PCA计算重构误差或者分析协方差矩阵的),有相似度模型(如ABOD,LOF、LOCI、LoOP和kNN等),有决策树集成(Isolation Forest、Feature Bagging),有基于SVM的方法如One-class SVM,也有基于神经网络的算法(用auto-encoder计算重构误差)等各种算法。

    异常值检测技术:

    • 数字异常值|Numeric Outlier   数字异常值方法是一维特征空间中最简单的非参数异常值检测方法,异常值是通过IQR(InterQuartile Range)计算得的。(箱线图)

    计算第一和第三四分位数(Q1、Q3),异常值是位于四分位数范围之外的数据点x i:

    • Z-score  Z-score是一维或低维特征空间中的参数异常检测方法。一个观测的z分数或标准分数是一个度量,表示一个数据点偏离样本均值的多少个标准差。该技术假定数据是高斯分布(高斯分布就是正态分布),异常值是分布尾部的数据点,因此远离数据的平均值。距离的远近取决于使用公式计算的归一化数据点z i的设定阈值Zthr: 

    其中xi是一个数据点,μ是所有点xi的平均值,δ是所有点xi的标准偏差。

    【机器学习】密度聚类DBSCAN与异常检测_littlemichelle-CSDN博客_dbscan异常检测

    基于密度的聚类,(我一直很迷惑密度和距离有什么区别),其实是设定一个邻域,在这个邻域内可达吧。下面的图很清晰。 

    preview

     算法的流程:1.找到任意一个核心点,对该核心点进行扩充;2.扩充方法是寻找从该核心点出发的所有密度相连的数据点;3遍历该核心的邻域内所有核心点,寻找与这些数据点密度相连的点。

    DBSCAN的主要优点有:

    1. 可以对任意形状的稠密数据集进行聚类。
    2. 可以在聚类的同时发现异常点,对数据集中的异常点不敏感
    3. 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。

    DBSCAN的主要缺点有:

    1. 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN不适合。
    2. 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
    3. 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

    K均值很难处理非球形的簇和不同大小的簇。 DBSCAN可以处理不同大小或形状的簇,并且不太受噪声和离群点的影响 

    该算法基于异常数据的两个特征:(1)异常数据只占少量;(2)异常数据特征值和正常数据差别很大。iForest算法由于简单高效的特点,常用于网络安全中的攻击检测和流量异常等分析。

    iForest算法得益于随机森林的思想,与随机森林由大量决策树组成一样,iForest森林也由大量的二叉树组成。iForest中的树叫isolation tree,简称iTree。iTree树和决策树不太一样,其构建过程也比决策树简单,是一个完全随机的过程。

    假设数据集有N条数据,构建一颗iTree时,从N条数据中均匀抽样(一般是无放回抽样)出ψ个样本出来,作为这颗树的训练样本。在样本中,随机选一个特征,并在这个特征的所有值范围内(最小值与最大值之间)随机选一个值,对样本进行二叉划分,将样本中小于该值的划分到节点的左边,大于等于该值的划分到节点的右边。由此得到一个分裂条件和左、右两边的数据集,然后分别在左右两边的数据集上重复上面的过程,直到数据集只有一条记录或者达到了树的限定高度。

    由于异常数据较小且特征值和正常数据差别很大。因此,构建iTree的时候,异常数据离根更近,而正常数据离根更远。一棵iTree的结果往往不可信,iForest算法通过多次抽取样本,构建多棵二叉树。最后整合所有树的结果,并取平均深度作为最终的输出深度,由此计算数据点的异常分值

    preview

    IForest目前是异常点检测最常用的算法之一,它的优点非常突出,它具有线性时间复杂度。因为是随机森林的方法,所以可以用在含有海量数据的数据集上面。通常树的数量越多,算法越稳定。由于每棵树都是互相独立生成的,因此可以部署在大规模分布式系统上来加速运算。对于目前大数据分析的趋势来说,它的好用是有原因的。

    但是IForest也有一些缺点,比如不适用于特别高维的数据。由于每次切数据空间都是随机选取一个维度和该维度的随机一个特征,建完树后仍然有大量的维度没有被使用,导致算法可靠性降低。此时推荐降维后使用,或者考虑使用One Class SVM。

    • 线性模型(linear models)

    假设数据在低维空间上有嵌入,那么无法、或者在低维空间投射后表现不好的数据可以认为是离群点。举个简单的例子,PCA可以用于做异常检测,一种方法就是找到k个特征向量(eigenvector),并计算每个样本再经过这k个特征向量投射后的重建误差(reconstruction error),而正常点的重建误差应该小于异常点。同理,也可以计算每个样本到这k个选特征向量所构成的超空间的加权欧氏距离(特征值越小权重越大)。在相似的思路下,我们也可以直接对协方差矩阵进行分析,并把样本的马氏距离(在考虑特征间关系时样本到分布中心的距离)作为样本的异常度,而这种方法也可以被理解为一种软性(Soft PCA)。同时,另一种经典算法One-class SVM也一般被归类为线性模型。

    • one-class SVM(单分类算法One Class Learning)(无监督)

    寻找一个超平面将样本中的正例圈出来,预测就是用这个超平面做决策,在圈内的样本就认为是正样本。由于核函数计算比较耗时,在海量数据的场景用的并不多

    它的训练集不应该掺杂异常点,因为模型可能会去匹配这些异常点

    • Autoencoder

    Autoencoder,中文称作自编码器,是一种无监督式学习模型。本质上它使用了一个神经网络来产生一个高维输入的低维表示。Autoencoder与主成分分析PCA类似,但是Autoencoder在使用非线性激活函数时克服了PCA线性的限制。

    Autoencoder包含两个主要的部分,encoder(编码器)和 decoder(解码器)。Encoder的作用是用来发现给定数据的压缩表示,decoder是用来重建原始输入。在训练时,decoder 强迫 autoencoder 选择最有信息量的特征,最终保存在压缩表示中。最终压缩后的表示就在中间的coder层当中。

    以下图为例,原始数据的维度是10,encoder和decoder分别有两层,中间的coder共有3个节点,也就是说原始数据被降到了只有3维。Decoder根据降维后的数据再重建原始数据,重新得到10维的输出。从Input到Ouptut的这个过程中,autoencoder实际上也起到了降噪的作用。

    preview

    优化目标则是通过最小化重构误差来同时优化encoder和decoder,从而学习得到针对样本输入x的抽象特征表示z。

    AutoEncoder在优化过程中无需使用样本的label,本质上是把样本的输入同时作为神经网络的输入和输出,通过最小化重构误差希望学习到样本的抽象特征表示z。这种无监督的优化方式大大提升了模型的通用性。

    preview

    案例:仅有部分样本有标签,剩下大部分样本都无标签;异常样本的类型不止一种,往往是多种异常情形同时存在;有标签的异常样本可能并没有区分出不同的异常类型;

    WWW 2018论文分享| 基于部分可见异常样本的异常检测问题

    这个算法的主要流程分成两个阶段。在第一阶段,对已知异常样本进行聚类,并从未标记样本中挖掘潜在异常样本以及可靠正常样本;第二阶段,基于以上的样本,构建带权重的多分类模型

    preview

    展开全文
  • 融合深度特征的电磁频谱异常检测算法.docx
  • 提出了一种基于时间序列的模式表示提取时间序列异常值的异常检测算法(PREOV)。时间序列的模式表示本身就具有压缩数据、保持时间序列基本形态的功能,并且具有一定的除噪能力。在时间序列模式表示的基础上提取异常...
  • 训练了隔离林异常检测算法,该算法可在预测测试集上的欺诈性交易时提供96.5%的准确性。 该数据集是一个包含284,807个事务的偏斜数据集,其中只有492个事务是易处理的(0.172%)。 使用Sklearn的Imbalanced ...
  • 本文首先对高光谱异常检测中的经典算法进行了研究分析,包括PCA和KPCA 两种特征提取算法,以及基于多元信号检测理论的RX、KRX和LAKDE异常检测算 法。通过仿真实验分析了这些算法的性能以及特征提取的必要性
  • 针对无线传感器网络节点定位场景中的环境变化、障碍物及传感器节点失效等异常问题, 提出了一种基于空间关联性的聚类异常检测算法(ODCASC算法)。该算法通过聚类技术完成节点的异常数据判断, 同时还利用邻居节点间...
  • #资源达人分享计划#
  • 为了提高异常检测的准确率,提出了一种基于长短时记忆网络的动态图模型异常检测算法。首先通过对动态图的变化特征进行分析,总结了Egonet图结构距离和编辑距离两类特征,高效地表示动态图结构的变化情况。其次,通过...
  • 本文提出了一种基于图神经网络的工控网络异常检测算法, 融合网络节点自身属性以及网络拓扑结构中邻域节点的信息实现对网络异常的检测. 首先, 每个网络节点获取蕴含了连接节点的特征信息以及节点之间交互信息的状态...
  • 在本文中,我们分析了最新的数据流异常检测技术和用于数据流异常检测算法(时间序列数据)。 批判性地调查了在大规模高速流的实时异常检测挑战下技术的性能,我们得出结论,对流的正常行为进行建模是一种合适的...
  • 大家好,我们知道 sklearn 库里的 KNN 并没有直接用于异常检测,但是包含了距离计算的函数,所以我们应用PyOD中KNN库进行异常检测,里面基本上也是调用sklearn的函数进行计算,并进行了一些加工。喜欢本文记得收藏、...

    大家好,我们知道 sklearn 库里的 KNN 并没有直接用于异常检测,但是包含了距离计算的函数,所以我们应用PyOD中KNN库进行异常检测,里面基本上也是调用sklearn的函数进行计算,并进行了一些加工。喜欢本文记得收藏、关注、点赞。

    【注】完整代码、数据、技术交流文末获取。

    一、图解KNN异常检算法

    KNN怎么进行无监督检测呢,其实也是很简单的,异常点是指远离大部分正常点的样本点,再直白点说,异常点一定是跟大部分的样本点都隔得很远。基于这个思想,我们只需要依次计算每个样本点与它最近的K个样本的平均距离,再利用计算的距离与阈值进行比较,如果大于阈值,则认为是异常点,同样,为了帮助读者理解如何利用KNN思想,实现异常值的识别,我画了下面这张图。对于第一个,3个邻居的平均距离为(2+2+3)/3=2.33,对于第二点,3个邻居的平均距离为(7+8+5)/3=6.667,明显,第二个点的异常程度要高与第一个点。当然,这里除了平均距离,还可以用中位数,也可以用最大距离,通过method这个参数进行控制。

    图片

    优点是不需要假设数据的分布,缺点是不适合高维数据、只能找出异常点,无法找出异常簇、你每一次计算近邻距离都需要遍历整个数据集,不适合大数据及在线应用、有人用hyper-grid技术提速将KNN应用到在线情况,但是还不是足够快,仅可以找出全局异常点,无法找到局部异常点。

    KNN异常检测过程: 对未知类别的数据集中的每个点依次执行以下操作:

    1. 计算当前点 与 数据集中每个点的距离

    2. 按照距离递增次序排序

    3. 选取与当前点距离最小的k个点

    4. 计算当前点与K个邻居的距离,并取均值、或者中值、最大值三个中的一个作为异常值

    1、异常实例计算

    无监督,我们就要标签去掉,为了演示过程,我们引进了9号嘉宾,这个人非常自信,每一项都填的非常高,明显异常,我们的目的就是要把这种类似的异常的数据找出来。

    图片

    2、距离计算和排序

    我们计算9号的异常程度,我们这里把计算和排序两步统一到一起了

    先计算9号与其他样本的距离,然后排序,取最近的三个,我们计算平均距离,可以看到,9号与最近的三个邻居的平均距离是9.29

    图片

    3、计算距离值

    我们再计算4号嘉宾的距离,可以看到,最近的三个邻居与4号的平均距离为3.07,只是9号的三分之一,相对来说就比较正常了。当然距离计算可以用最大值,平均值,中位数三个,算法中通过method这个参数进行调节。

    图片

    我们依次计算,就可以得到每个样本3个邻居的平均距离了,越高的越异常,我们也可以用Python的包来检测下我们计算的对不对。

    import numpy as np  
    X_train = np.array([
    [7,  7,  9,  3],
    [5,  4,  5,  6],
    [8,  6,  9,  3],
    [9,  9,  7,  7],
    [5,  5,  5,  5],
    [9,  9,  9,  1],
    [5,  2,  5,  5],
    [8,  8,  7,  6],
    [10,10,  12,  13]])
    # import kNN分类器
    from pyod.models.knn import KNN
    
    # 训练一个kNN检测器
    clf_name = 'kNN'
    # 初始化检测器clf
    clf = KNN( method='mean', n_neighbors=3, )
    clf.fit(X_train) 
    
    # 返回训练数据X_train上的异常标签和异常分值
    # 返回训练数据上的分类标签 (0: 正常值, 1: 异常值)
    y_train_pred = clf.labels_  
    y_train_pred
    array([0, 0, 0, 0, 0, 0, 0, 0, 1])
    
    # 返回训练数据上的异常值 (分值越大越异常)
    y_train_scores = clf.decision_scores_  
    y_train_scores
    array([2.91709951, 3.01181545, 3.09299219, 4.16692633, 3.07001503,
           4.25784112, 3.98142397, 3.24271326, 9.42068891])
    

    我们自己计算的平均距离为9.29,系统算的9.42,有一点点的差异,可能是哪里加了一个微调的系数,大家可以探索下。

    二、KNN异常检测算法应用

    上面大概知道了KNN怎么进行异常检测的,现在我们找个具体的案例,看看更加明细的参数以及实现的过程,有个更加立体的感觉,并且学完能够应用起来。

    源码地址:https://pyod.readthedocs.io/en/latest/_modules/pyod/models/knn.html#KNN

    图片

    图片

    1、算法基本用法

    地址:https://pyod.readthedocs.io/en/latest/pyod.models.html#module-pyod.models.knn

    pyod.models.knn.KNN(contamination=0.1, 
                        n_neighbors=5, 
                        method='largest', 
                        radius = 1.0, 
                        algorithm='auto', 
                        leaf_size=30, 
                        metric='minkowski', 
                        p=2, 
                        metric_params=None, 
                        n_jobs=1, 
                        **kwargs)
    

    2、参数详解

    contamination:污染度,contamination : float in (0., 0.5), optional (default=0.1)数据集的污染量,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。如果是“自动”,则确定决策函数阈值,如原始论文中所示。_在版本0.20中更改:_默认值contamination将从0.20更改为’auto’0.22。

    n_neighbors:选取相邻点数量

    method:‘largest’、‘mean’、‘median’

    • largest:使用与第k个相邻点的距离作为异常得分

    • mean:使用k个相邻点距离的平均值作为异常得分

    • median:使用k个相邻点距离的中值作为异常得分

    radius : radius_neighbors使用的参数空间半径

    algorithm:找到最近的k个样本

    • kd_tree:依次对K维坐标轴,以中值切分,每一个节点是超矩形,适用于低维(<20时效率最高)

    • ball_tree:以质心c和半径r分割样本空间,每一个节点是超球体,适用于高维(kd_tree高维效率低)

    • brute:暴力搜索

    • auto:通过 fit() 函数拟合,选择最适合的算法;如果数据稀疏,拟合后会自动选择brute,参数失效

    leaf_sizekd_tree和ball_tree中叶子大小,影响构建、查询、存储,根据实际数据而定。树叶中可以有多于一个的数据点,算法在达到叶子时在其中执行暴力搜索即可。如果leaf size 趋向于 N(训练数据的样本数量),算法其实就是 brute force了。如果leaf size 太小了,趋向于1,那查询的时候 遍历树的时间就会大大增加。

    metric:距离计算标准,距离标准图例

    • euclidean:欧氏距离(p = 2)

    • manhattan:曼哈顿距离(p = 1)

    • minkowski:闵可夫斯基距离

    p : metric参数,默认为2

    metric_params : metric参数

    n_jobs : 并行作业数,-1时,n_jobs为CPU核心数。

    3、属性详解

    decision_scores: 数据X上的异常打分,分数越高,则该数据点的异常程度越高

    threshold: 异常样本的个数阈值,基于contamination这个参数的设置,总量最多等于n_samples * contamination

    labels: 数据X上的异常标签,返回值为二分类标签(0为正常点,1为异常点)

    4、方法详解

    fit(X): 用数据X来“训练/拟合”检测器clf。即在初始化检测器clf后,用X来“训练”它。

    fit_predict_score(X, y): 用数据X来训练检测器clf,并预测X的预测值,并在真实标签y上进行评估。此处的y只是用于评估,而非训练

    decision_function(X): 在检测器clf被fit后,可以通过该函数来预测未知数据的异常程度,返回值为原始分数,并非0和1。返回分数越高,则该数据点的异常程度越高

    predict(X): 在检测器clf被fit后,可以通过该函数来预测未知数据的异常标签,返回值为二分类标签(0为正常点,1为异常点)

    predict_proba(X): 在检测器clf被fit后,预测未知数据的异常概率,返回该点是异常点概率

    当检测器clf被初始化且fit(X)函数被执行后,clf就会生成两个重要的属性:

    decision_scores: 数据X上的异常打分,分数越高,则该数据点的异常程度越高

    5、案例分析

    KNN算法专注于全局异常检测,所以无法检测到局部异常。首先,对于数据集中的每条记录,必须找到k个最近的邻居。然后使用这K个邻居计算异常分数。最 大: 使用到第k个邻居的距离作为离群值得分;平均值: 使用所有k个邻居的平均值作为离群值得分;中位数: 使用到k个邻居的距离的中值作为离群值得分

    在实际方法中后两种的应用度较高。然而,分数的绝对值在很大程度上取决于数据集本身、维度数和规范化。参数k的选择当然对结果很重要。如果选择过低,记录的密度估计可能不可靠。(即过拟合)另一方面,如果它太大,密度估计可能太粗略。K值的选择通常在10-50这个范围内。所以在分类方法中,选择一个合适的K值,可以用交叉验证法。

    #导入
    from pyod.models.knn import KNN
    from pyod.utils.data import generate_data
    from pyod.utils.data import evaluate_print
    from pyod.utils.example import visualize
    
    #参数设置
    contamination = 0.1  # percentage of outliers
    n_train = 200  # number of training points
    n_test = 100  # number of testing points
    
    # 数据生成
    X_train, y_train, X_test, y_test = generate_data(\
        n_train=n_train, n_test=n_test,\ 
        contamination=contamination)
    
    # import kNN分类器
    from pyod.models.knn import KNN
    
    # 训练一个kNN检测器 初始化检测器clf
    clf_name = 'kNN'
    clf = KNN() 
    # 使用X_train训练检测器clf
    clf.fit(X_train)
    
    # 返回训练数据X_train上的异常标签和异常分值
    # 返回训练数据上的分类标签 (0: 正常值, 1: 异常值)
    y_train_pred = clf.labels_
    
    # 返回训练数据上的异常值 (分值越大越异常)
    y_train_scores = clf.decision_scores_  
    
    # 用训练好的clf来预测未知数据中的异常值
    y_test_pred   = clf.predict(X_test)
    y_test_scores = clf.decision_function(X_test)
    

    对识别结果可视化

    # 模型可视化
    visualize(clf_name, 
              X_train, 
              y_train, 
              X_test, 
              y_test, 
              y_train_pred,
              y_test_pred, 
              show_figure=True, 
              save_figure=False
             )
    

    图片

    推荐文章

    技术交流

    欢迎转载、收藏、有所收获点赞支持一下!

    在这里插入图片描述

    目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

    • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
    • 方式②、添加微信号:dkl88191,备注:来自CSDN
    • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

    长按关注

    展开全文
  • 本文将介绍在时间序列预测相关问题中常见的异常检测算法,可以很大程度上帮助改善最终预测效果。喜欢记得收藏、关注、点赞。 注:完整版代码、数据、技术交流,文末获取 异常分类 时间序列的异常检测问题通常表示为...

    本文将介绍在时间序列预测相关问题中常见的异常检测算法,可以很大程度上帮助改善最终预测效果。喜欢记得收藏、关注、点赞。

    注:完整版代码、数据、技术交流,文末获取

    异常分类

    时间序列的异常检测问题通常表示为相对于某些标准信号或常见信号的离群点。虽然有很多的异常类型,但是我们只关注业务角度中最重要的类型,比如意外的峰值、下降、趋势变化以及等级转换(level shifts)。

    常见的异常有如下几种:

    • 革新性异常:innovational outlier (IO),造成离群点干扰不仅作用于X(T),而且影响T时刻以后序列的所有观察值。

    • 附加性异常:additive outlier (AO),造成这种离群点的干扰,只影响该干扰发生的那一个时刻T上的序列值,而不影响该时刻以后的序列值。

    • 水平移位异常:level shift (LS),造成这种离群点的干扰是在某一时刻T,系统的结构发生了变化,并持续影响T时刻以后的所有行为,在数列上往往表现出T时刻前后的序列均值发生水平位移。

    • 暂时变更异常temporary change (TC):造成这种离群点的干扰是在T时刻干扰发生时具有一定初始效应,以后随时间根据衰减因子的大小呈指数衰减。

    上面的解释可能不太容易理解,我们结合图片来看一下:

    图片

    通常,异常检测算法应该将每个时间点标记为异常/非异常,或者预测某个点的信号,并衡量这个点的真实值与预测值的差值是否足够大,从而将其视为异常。使用后面的方法,你将能够得到一个可视化的置信区间,这有助于理解为什么会出现异常并进行验证。

    常见异常检测方法

    从分类看,当前发展阶段的时序异常检测算法和模型可以分为一下几类:

    图片

    • 统计模型:优点是复杂度低,计算速度快,泛化能力强悍。因为没有训练过程,即使没有前期的数据积累,也可以快速的投入生产使用。缺点是准确率一般。但是这个其实是看场景的,并且也有简单的方法来提高业务层面的准确率。这个后面会提到。

    • 机器学习模型:鲁棒性较好,准确率较高。需要训练模型,泛化能力一般。

    • 深度学习模型:普遍需要喂大量的数据,计算复杂度高。整体看,准确性高,尤其是近段时间,强化学习的引入,进一步巩固其准确性方面的领先优势。

    3-Sigma

    3-Sigma原则又称为拉依达准则,该准则定义如下:假设一组检测数据只含有随机误差,对原始数据进行计算处理得到标准差,然后按一定的概率确定一个区间,认为误差超过这个区间的就属于异常值。

    图片

    使用3-Sigma的前提是数据服从正态分布,满足这个条件之后,在3-Sigma范围(μ–3σ,μ+3σ)内99.73%的为正常数据,其中σ代表标准差,μ代表均值,x=μ为图形的对称轴。下面是3-Sigma的Python实现:

    import numpy as np
    def three_sigma(df_col):
        '''
        df_col:DataFrame数据的某一列
        '''
        rule = (df_col.mean() - 3 * df_col.std() > df_col) | (df_col.mean() + 3 * df_col.std() < df_col)
        index = np.arange(df_col.shape[0])[rule]
        out_range = df_col.iloc[index]
        return out_range
    

    对于异常值检测出来的结果,有多种处理方式,如果是时间序列中的值,那么我们可以认为这个时刻的操作属于异常的;如果是将异常值检测用于数据预处理阶段,处理方法有以下四种:

    • 删除带有异常值的数据;

    • 将异常值视为缺失值,交给缺失值处理方法来处理;

    • 用平均值进行修正;

    • 当然我们也可以选择不处理。

    Grubbs测试

    Grubbs’Test为一种假设检验的方法,常被用来检验服从正太分布的单变量数据集(univariate data set)Y 中的单个异常值。若有异常值,则其必为数据集中的最大值或最小值。原假设与备择假设如下:

    • H0: 数据集中没有异常值

    • H1: 数据集中有一个异常值

    使用Grubbs测试需要总体是正态分布的。算法流程:

    1. 样本从小到大排序

    2. 求样本的mean和dev

    3. 计算min/max与mean的差距,更大的那个为可疑值

    4. 求可疑值的z-score (standard score),如果大于Grubbs临界值,那么就是outlier

    Grubbs临界值可以查表得到,它由两个值决定:检出水平α(越严格越小),样本数量n,排除outlier,对剩余序列循环做 1-4 步骤。由于这里需要的是异常判定,只需要判断tail_avg是否outlier即可。

    from outliers import smirnov_grubbs as grubbs
    print(grubbs.test([8, 9, 10, 1, 9], alpha=0.05))
    print(grubbs.min_test_outliers([8, 9, 10, 1, 9], alpha=0.05))
    print(grubbs.max_test_outliers([8, 9, 10, 1, 9], alpha=0.05))
    print(grubbs.max_test_indices([8, 9, 10, 50, 9], alpha=0.05))
    

    S-ESD与S-H-ESD

    鉴于时间序列数据具有周期性(seasonal)、趋势性(trend),异常检测时不能作为孤立的样本点处理;故而Twitter的工程师提出了S- ESD (Seasonal ESD)与S-H-ESD (Seasonal Hybrid ESD)算法,将ESD扩展到时间序列数据。

    STL分解

    STL (Seasonal-Trend decomposition procedure based on Loess) 为时序分解中一种常见的算法,基于LOESS将某时刻的数据Yv分解为趋势分量(trend component)、季节性分量(seasonal component)和残差(remainder component):

    图片

    图片

    由上到下依次为:原始时间序列和使用 STL 分解得到的季节变化部分、趋势变化部分以及残差部分。

    STL分为内循环(inner loop)与外循环(outer loop),其中内循环主要做了趋势拟合与周期分量的计算。假定T(k)v、Sv(k)为内循环中第k-1次pass结束时的趋势分量、周期分量,初始时T(k)v=0;并有以下参数:

    • n(i)内层循环数

    • n(o)外层循环数

    • n§为一个周期的样本数

    • n(s)为Step 2中LOESS平滑参数

    • n(l)为Step 3中LOESS平滑参数

    • n(t)为Step 6中LOESS平滑参数

    每个周期相同位置的样本点组成一个子序列(subseries),容易知道这样的子序列共有共有n§个,我们称其为cycle-subseries。

    Python的statsmodels实现了一个简单版的时序分解,通过加权滑动平均提取趋势分量,然后对cycle-subseries每个时间点数据求平均组成周期分量:

    使用示例:

    import numpy as np
    import pandas as pd
    from statsmodels.tsa.seasonal import seasonal_decompose
    import matplotlib.pyplot as plt
    # Generate some data
    np.random.seed(0)
    n = 1500
    dates = np.array('2019-01-01', dtype=np.datetime64) + np.arange(n)
    data = 12 * np.sin(2 * np.pi * np.arange(n) / 365) + np.random.normal(12, 2, 1500)
    df = pd.DataFrame({'data': data}, index=dates)
    # Reproduce the example in OP
    seasonal_decompose(df, model='additive', period=1).plot()
    plt.show()
    

    S-ESD

    STL将时间序列数据分解为趋势分量、周期分量和余项分量。想当然的解法——将ESD运用于STL分解后的余项分量中,即可得到时间序列上的异常点。但是,我们会发现在余项分量中存在着部分假异常点(spurious anomalies)。如下图所示:

    图片

    在红色矩形方框中,向下突起点被误报为异常点。为了解决这种假阳性降低准确率的问题,S-ESD算法用中位数(median)替换掉趋势分量;

    使用示例:

    import numpy as np
    import sesd
    ts = np.random.random(100)
    # Introduce artificial anomalies
    ts[14] = 9
    ts[83] = 10
    outliers_indices = sesd.seasonal_esd(ts, periodicity=20, hybrid=True, max_anomalies=2)
    for idx in outliers_indices:
        print(f'Anomaly index: {idx}, anomaly value: {ts[idx]}')
    

    移动平均/加权移动平均/指数加权移动平均

    移动平均 moving average

    给定一个时间序列和窗口长度N,moving average等于当前data point之前N个点(包括当前点)的平均值。不停地移动这个窗口,就得到移动平均曲线。

    累加移动平均 cumulative moving average

    设{xi:i≥1}是观察到的数据序列。累积移动平均线是所有数据的未加权平均值。如果若干天的值是x1,…,xi,那么:

    图片

    加权移动平均 weighted moving average

    加权移动平均值是先前w个数据的加权平均值

    图片

    指数加权移动平均 exponential weighted moving average

    指数移动与移动平均有些不同:

    • 并没有时间窗口,用的是从时间序列第一个data point到当前data point之间的所有点。

    • 每个data point的权重不同,离当前时间点越近的点的权重越大,历史时间点的权重随着离当前时间点的距离呈指数衰减,从当前data point往前的data point,权重依次为

    图片

    该算法可以检测一个异常较短时间后发生另外一个异常的情况,异常持续一段时间后可能被判定为正常。

    ARIMA 模型

    自回归移动平均模型(ARIMA)是一种设计上非常简单的方法,但其效果足够强大,可以预测信号并发现其中的异常。该方法的思路是从过去的几个数据点来生成下一个数据点的预测,在过程中添加一些随机变量(通常是添加白噪声)。以此类推,预测得到的数据点可以用来生成新的预测。很明显:它会使得后续预测信号数据更平滑。使用这种方法最困难的部分是选择差异数量、自回归数量和预测误差系数。另一个障碍是信号经过差分后应该是固定的。也就是说,这意味着信号不应该依赖于时间,这是一个比较显著的限制。

    图片

    异常检测是利用离群点来建立一个经过调整的信号模型,然后利用t-统计量来检验该模型是否比原模型能更好的拟合数据。

    图片

    在这种情况下,你可以找到适合信号的 ARIMA 模型,它可以检测出所有类型的异常。

    神经网络

    与CART方法一样,神经网络有两种应用方式:监督学习和无监督学习。我们处理的数据是时间序列,所以最适合的神经网络类型是 LSTM。如果构建得当,这种循环神经网络将可以建模实现时间序列中最复杂的依赖关系,包括高级的季节性依赖关系。如果存在多个时间序列相互耦合,该方法也非常有用。该领域还在研究中,可以参考这里,构建时序模型需要大量的工作。构建成功完成后,就可能在精确度方面取得优异的成绩。

    推荐文章

    技术交流

    欢迎转载、收藏、有所收获点赞支持一下!数据、代码可以找我获取

    在这里插入图片描述

    目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

    • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
    • 方式②、添加微信号:dkl88191,备注:来自CSDN
    • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

    在这里插入图片描述

    展开全文
  • 数学建模:异常检测算法

    千次阅读 2022-06-10 10:25:42
    以下是异常检测和监督学习相关算法的适用范围: 近三个月,成交量大于200000就可以认为发生了异常(天量,嗯,要注意风险了……) 大体可以知道,该股票在成交量少于20000,或者成交量大于80000
  • 异常检测算法概述(全)

    万次阅读 多人点赞 2019-02-13 16:59:46
    异常检测算法概述(全) ​ ——序列数据异常检测 1、异常的一些概念及异常检测的挑战 2、异常检测问题的不同方面 3、基于分类的异常检测算法 4、基于最近邻的异常检测技术 5、基于聚类的异常检测技术 6、统计异常...
  • 针对现有的依赖数据时空相关性的异常检测技术中对邻节点数据及其本身可靠性的忽略,建立了一种基于历史数据及可靠邻居协作的两步节点异常数据检测算法NADST。实验结果表明,该算法能在实现高检测精度的同时将虚警率...
  • 基于python与局部异常因子的异常检测算法设计与实现
  • 2. 基于 LOF 的异常检测算法 此篇主要介绍以下内容: LOF 算法概述 LOF 算法应用实例 小结 2.1 LOF算法概述 LOF (Local Outliers Factor,局部异常因子) 算法 是一种非监督异常检测算法,它是通过计算给定数据点相...
  • 人工免疫RNSA智能算法,根据自体生成定半径的检测器,用于异常检测以及入侵检测。
  • 这里讲述的是包含有异常值的时间序列如何判定哪个时刻发生了异常,是时序异常检测任务。 同比:本期与同期做对比。 环比:本期与上期做对比。 异常主要包括: 数据突变异常:数据在某个时刻或短时间段内,突升/突降...
  • 我们给出了局部异常的形式化定义,并首先提出了解决局部异常的Nave算法,由于其能耗过大,又提出了分布式的解决方案DLODA。DLODA将网络分成多个区域,每个区域选择一个簇头,簇头能够在网内提前算出部分查询结果,并过滤...
  • 摘要:异常检测是目前时序数据分析最成熟的应用之一,有效...本文主要对目前主流的异常检测算法进行汇总并将其分为基于统计的异常检测、基于预测的异常检测等类别,介绍各自的优缺点并寻找适合时序数据的异常检测算法
  • 异常检测算法综述

    千次阅读 2020-08-05 21:22:40
    对现阶段业内常用的异常检测算法进行了较详细的综述。主要介绍四类方法:统计方法、指标预测法、无监督方法及有监督方法。
  • 正文共:8636字8图预计阅读时间:22分钟一、异常检测简介异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点、异常值检测等等。1.1 异常检测适用的场景异常...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 139,641
精华内容 55,856
关键字:

异常检测算法

友情链接: qnhia.zip