Novelty and Outlier Detection(奇异值和异常值检测)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Novelty and Outlier Detection(奇异值和异常值检测)相关的知识,希望对你有一定的参考价值。

参考技术A 最近要开始一个新的项目,需要在正常的某种行为中,检测出异常的行为。在没有得到数据前对于此类问题的学习进行一下总结。

个人觉得,在得到一个对上述项目较为笼统的描述和没有实际数据的情况下,可以将这个项目分为3种情况,之后再根据得到的实际数据对号入座,进行正确分类。

case1 : 训练数据中存在target列,并且target列中有0(正常)或者 1(异常)。这种情况下,该项目属于有监督学习中的binary classification问题。

case2 :训练数据中没有target列,根据已知的信息,我们知道在数据中既存在正常行为的数据,也存在异常行为的数据。这种情况下,该项目属于无监督学习中的异常值检测问题。

case3 : 训练数据可能有target列,可能没有target列。如果存在target列,但是只有0(正常)一种值;如果不存在target列,根据已知的信息,我们知道数据只存在正常行为的数据。这两种情况都可以归类为半监督学习的奇异值检测问题。

目前,我知道项目数据倾向于case2 和 case3 中的一种,所以在这里主要介绍一下异常值和奇异值检测的概念和相关算法。

首先明确一下异常值检测和奇异值检测的主要区别:

        异常值检测:训练数据中含有异常值,通过相关算法找到训练数据的中心模式,忽略偏差观测值,从而检测出异常值。

        奇异值检测:训练数据不包含异常值,只含有positive(正常)的数据,通过算法学习其pattern。之后用于检测未曾看到过新数据是否属于这个pattern,如果属于,该新数据是positive,否则negative,即奇异值。

异常值检测和奇异值检测都属于异常检测(anomaly detection),其中异常值检测又被称为无监督异常检测,奇异值检测又被称为半监督异常检测。

异常值检测的算法:

在 https://scikit-learn.org/stable/modules/outlier_detection.html 中提到sklearn中的ensemble.IsolationForest 和 neighbors.LocalOutlierFactor 算法在异常值检测时具有较好的表现。但是我尝试使用一组数据进行异常值检测,发现cluster.KMeans 和 cluster.SpectralClustering有更好的表现,反而neighbors.LocalOutlierFactor 效果很不好。 svm.OneClassSVM 算法因为对于异常值很敏感,因此OneClassSVM算法不适合于异常值检测问题。

奇异值检测的算法:

svm.OneClassSVM 算法对于奇异值检测问题具有较好的表现。neighbors.LocalOutlierFactor 算法也可用于奇异值检测,但是需要将算法中novelty参数的值设置为True。i.e. lof=LocalOutlierFactor(novelty=True)。并且没有fit_predict function,此时需要用predict, decision_function 和 score_sampleson functions 用于新的观测数据而不是训练数据。除此之外,还有network的一种常用算法,可用于奇异值检测:autoencoder算法。对于该算法,本人尝试使用keras或者PyOD进行实现。通过一组数据进行奇异值检测,svm.OneClassSVM 对于我的数据有相对最好的表现。

总结

1. 明确问题是有监督学习的分类问题还是无监督学习的聚类问题,或者是半监督学习的奇异值检测问题。

2. 如果是无监督学习的异常值检测问题,根据我的测试结果,可以首先尝试cluster.KMeans 和 cluster.SpectralClustering 算法,然后使用ensemble.IsolationForest,neighbors.LocalOutlierFactor 等算法。

3. 如果是半监督学习的奇异值检测问题,根据我的测试结果,可以首先尝试svm.OneClassSVM 算法,然后使用neighbors.LocalOutlierFactor,autoencoder等算法。

仍然是那句话,没有一个算法可以适用于所有的数据,要通过进行大量测试与试验,才可以找到适合自己问题的最佳算法。希望小伙伴都可以得到满意的结果!!!

R语言使用car包的influencePlot函数将回归分析中的离群点(outlier)杠杆(leverage)和影响(influence)的信息组合成一个高度信息量丰富的合成图

R语言使用car包的influencePlot函数将回归分析中的离群点(outlier)、杠杆(leverage)和影响(influence)的信息组合成一个高度信息量丰富的合成图

目录

以上是关于Novelty and Outlier Detection(奇异值和异常值检测)的主要内容,如果未能解决你的问题,请参考以下文章

Kernel Null Space Methods for Novelty Detection CVPR 2013

R使用Z分数和四分位数区间法去除异常值(outlier)

outlier数学中是啥意思

Real Time Credit Card Fraud Detection with Apache Spark and Event Streaming

自动编码(Autoencoder)器异常检测(outlier detection)实战

R语言ggplot2可视化:箱图(box plot)可视化并且在为箱图的异常值(outlier)添加数据标签