基于聚类的异常值检测方法( 1 )

韩家炜的书中提到也可以用基于聚类的方法去做Outlier的识别。的确,outlier这个概念是和cluster这样的场景很相关的。对于工业上的数据来说,一般这个cluster的数量会是1或者2。在找出了cluster后,我们可以发现outlier要么不属于任何的cluster,要么说outlier在这个cluster里显得如此的奇怪。

今天我们用DBSCAN的方法去发现cluster和outleir。DBSCAN的介绍可以见这篇文章: http://www.cnblogs.com/chaosimple/archive/2013/07/01/3164775.html. 文章里也提到了DBSCAN的缺点,也就是说当不同聚类的密度相差明显的时候,这个eps会不起作用。这个问题在我的前一篇文章也提到过。也许基于Shared Nearest Neighbor的方法可以解决这个问题,论文见此 http://www.doc88.com/p-901293142793.html。这个方法以后写到cluster的时候,应该可以分享给大家。

回到今天的主题,基于DBSCAN的聚类方法其实就可以侦测出Noises或者outliers。但是DBSCAN里的eps参数真是让人头疼。这里我们继续采用基于近邻的异常值检测方法一文中提到的estimate_bandwidth方法,这一方法会根据quantile比例的最大近邻距离,估算出整个数据集的平均最大近邻距离。默认这里的quantile是0.3。

整个算法的思路,总结起来就是如前文所述:  如果一个样本,不属于任何一个cluster,则它为outlier。在scikit learn的DBSCAN里, outlier或者noise会被标记为-1。

from sklearn.cluster import DBSCAN, estimate_bandwidth

def detectOutliers( X, quantile = 0.3, minPts = 3 ):
    radius = estimate_bandwidth( X, quantile )
    dbscan = DBSCAN( eps = radius, min_samples = minPts )
    labels = dbscan.fit_predict( X )
    labels = np.array( labels == -1, np.int )
    return labels

该方法在同一个数据集的效果如下,和基于近邻的异常检测效果类似.

下次基于聚类的文章会写在cluster之后,每个样本都会属于某个cluster,但是在单个cluster里,outlier会和其余的聚类中样本明显不太一样。

时间: 2025-01-31 04:12:10

基于聚类的异常值检测方法( 1 )的相关文章

基于聚类的异常值检测方法( 2 )

韩家炜书中在介绍基于聚类的异常值检测中的第二种方法提到: 如果某对象与最近的簇的距离非常远,则该对象为Outlier.这句话其实有两个意思,第一个意思假定某对象在cluster A中,则它必定距离A簇比较近( 一般指的是球型的cluster ).第二个意思假定某对象是未知的点,距离A簇最近.其实在使用中,大部分情况我们可以把这两个场景合二为一.在本文中,我们假定对象已经在cluster A中. 本文基于聚类的异常值检测的算法思路是: 1 ) 用聚类算法做cluster 2 ) 计算cluster

基于近邻的异常值检测方法

今天写个基于近邻的异常值方法.由于维数灾难,这个方法在高维上慎用.而且对于有多个cluster且密度差别比较大的数据,这个方法是不适用的. 该方法的思路如下: 1) 对与每个样本计算出与其指定半径radius内近邻的个数 2) 如果某个样本近邻的个数少于指定的近邻最小个数minPts, 则为outlier 一般来说所谓的outler,数量会很小,且值会和正常值很不一样.要不然就可能是个cluster的问题了.所以这里默认的minPts我设置为3.那radius怎么办呢.在sklearn.clus

异常值检测方法(Z-score,DBSCAN,孤立森林)

 机器学习_深度学习_入门经典(博主永久免费教学视频系列) https://study.163.com/course/courseMain.htm?courseId=1006390023&share=2&shareId=400000000398149 微信扫二维码,免费学习更多python资源 数据预处理的好坏,很大程度上决定了模型分析结果的好坏.(Garbage In Garbage Out!) 其中,异常值(outliers)检测是整个数据预处理过程中,十分重要的一环.方法也是多种多样

基于半监督学习方法的异常值检测

在韩家炜书中提到了使用半监督学习方法的异常值检测.在半监督学习中,一部分样本会被标记为“正常”或"离群点“,另一部分样本没有标号,需要算法去估计.貌似这看上去有些像分类得预测问题.但是半监督学习的思想是每次学习后,把最有可能预测正确的样本,加入到下一次迭代的训练集中去.如此不断扩大学习和标记的范围.问题是如何指定一开始的初始标签?( 当然可以人为指定 ) 我们来看这个数据集.绿色部分是被标记“正常”的样本.红色的为“异常”的样本.蓝色的为“未标记”样本点.其实这里我自己采用的初始标记方法很简单,

改进的基于长时谱能量差异和基音比例的语音检测方法_爱学术

[摘要]语音检测是语音信号处理的前端,利用长时谱能量差异特征的语音检测无法区分突发噪声和语音,掺杂着突发噪声的语音信号会对语音处理系统带来不良影响.提出了一种基于长时谱能量差异特征和基音比例特征相结合的语音检测方法,该方法的优点是,在利用长时谱能量差异特征基础上引入基音比例特征,从而有效减少了将信号中突发噪声误判为语音的错误.实验显示,该算法能够在多种信噪比环境下取得很好的检测结果. [作者] 孟一鸣  欧智坚 转载至:https://www.ixueshu.com/document/07705

基于密度的局部异常值检测

今天介绍基于密度的异常点检测,我们以LOF算法为例.先看下图 C1和C2为两个cluster,cluster里面的密度都很高,只是不同cluster里点的距离不太一样.b相对于C1为一个局部( local )的outlier.a为一个整体( global )的outlier.所以这里的outlier检测,并非是基于distance或者基于近邻的.而是比较点和点的密度的差距.如果某个点和周围点比起来密度明显小,则该点很可能是outlier! 问题是如何定义密度?为了引出密度的概念.这里我们来介绍 

【Python数据分析基础】: 异常值检测和处理

在机器学习中,异常检测和处理是一个比较小的分支,或者说,是机器学习的一个副产物,因为在一般的预测问题中,模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些在这些性质上表现完全与整体样本不一致的点,我们就称其为异常点,通常异常点在预测问题中是不受开发者欢迎的,因为预测问题通产关注的是整体样本的性质,而异常点的生成机制与整体样本完全不一致,如果算法对异常点敏感,那么生成的模型并不能对整体样本有一个较好的表达,从而预测也会不准确.从另一方面来说,异常点在某

人脸识别系列之人脸检测--训练基于肤色特征的检测

前言: 基于特征的方法是利用人脸的先验知识导出的规则进行人脸检测. 一般来说,常用的特征包括人脸和人脸器官典型的边缘和形状特征(如人脸轮廓.虹膜轮廓.嘴唇轮廓等).纹理特征(纹理是在图上表现为灰度或颜色分布的某种规律性,这种规律性在不同类别的纹理中有其不同特点,人脸有其特定的纹理特征).颜色特征(人脸肤色特征,目前主要有RGB,HSV,YCbCr,YIQ,HIS等彩色空间模型被用来表示人脸的肤色,从而进行基于颜色信息的人脸检测方法的研究). 人脸检测的方法: 基于规则/知识方法 – 人脸模式的变

百度云离线下载含有违规内容检测方法分析

最近国家开始一轮净网行动,清除网上的淫秽***信息.各大互联网厂家纷纷开始行动,比如当年很好用的百度云离线下载就一度关闭.后来再次开启后,就出现了这句经典词,因含有违规内容被屏蔽无法下载. 其实被屏蔽的不一定都是不健康视频,有些仅仅是因为文件名含有一些字眼而已,比如一些美国大片的枪版就几乎都不能通过百度云的离线下载检测.据说这种方法还在迅雷等地方都有检测,因此我们来分析一下,这个检测到底是如何进行的. 首先上传了一个BT文件,BT文件里面的内容为大闹天宫的电影,但是我把文件名改成了含有敏感词汇的