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
Real Time Credit Card Fraud Detection with Apache Spark and Event Streaming