我有一些关于异常值检测的问题:
我们可以使用k-means找到异常值,这是一个好方法吗?
是否有任何群集算法不接受用户的任何输入?
我们可以使用支持向量机或任何其他监督学习算法进行异常值检测吗?
每种方法的优缺点是什么?
答案 0 :(得分:38)
我将自己限制在我认为对于提出所有问题的线索必不可少的内容,因为这是许多教科书的主题,并且可能在不同的问题中更好地解决这些问题。
我不会使用k-means来识别多变量数据集中的异常值,原因很简单,k-means算法不是为此目的而构建的:你总是会得到一个最小化的方法。总簇内平方和(因此最大化群集间SS,因为总方差是固定的),并且异常值不一定定义它们自己的簇。考虑R中的以下示例:
set.seed(123)
sim.xy <- function(n, mean, sd) cbind(rnorm(n, mean[1], sd[1]),
rnorm(n, mean[2],sd[2]))
# generate three clouds of points, well separated in the 2D plane
xy <- rbind(sim.xy(100, c(0,0), c(.2,.2)),
sim.xy(100, c(2.5,0), c(.4,.2)),
sim.xy(100, c(1.25,.5), c(.3,.2)))
xy[1,] <- c(0,2) # convert 1st obs. to an outlying value
km3 <- kmeans(xy, 3) # ask for three clusters
km4 <- kmeans(xy, 4) # ask for four clusters
从下图中可以看出,外围价值永远不会被恢复:它将永远属于其他一个集群。
然而,一种可能性是使用两阶段方法,其中一个人以迭代的方式去除极值点(此处定义为远离其群集质心的向量),如下文所述:{{3} (Hautamäki,等人)。
这与遗传研究中用于检测和去除表现出基因分型错误的个体,或兄弟姐妹/双胞胎的个体(或者当我们想要识别群体亚结构)时所做的有些相似,而我们只想保持不相关的个体;在这种情况下,我们使用多维缩放(相当于PCA,前两个轴的常数),并在前10或20轴中的任何一个轴上移除高于或低于6 SD的观测值(例如,参见{ {3}},Patterson等, PLoS Genetics 2006 2(12))。
一种常见的替代方法是使用有序的稳健马哈拉诺比斯距离,可以根据卡方分布的预期分位数绘制(在QQ图中),如下文所述:
R.G。加勒特(1989)。 Improving K-Means by Outlier Removal。 地球化学勘探期刊 32(1/3):319-341。
(可在Population Structure and Eigenanalysis R套餐中找到。)
这取决于您所谓的用户输入。我将您的问题解释为某些算法是否可以自动处理距离矩阵或原始数据并停止在最佳数量的聚类上。如果是这种情况,并且对于任何基于距离的分区算法,则可以使用任何可用的有效性指数进行聚类分析;
中给出了一个很好的概述Handl,J.,Knowles,J。和Kell,D.B。 (2005年)。 The chi-square plot: a tools for multivariate outlier recognition。 Bioinformatics 21(15):3201-3212。
我在mvoutlier上讨论过。例如,您可以在数据的不同随机样本(使用引导程序)上运行算法的多个实例,用于一系列簇编号(例如,k = 1到20),并根据优化的标准选择k(taht)轮廓宽度,共生相关性等);它可以完全自动化,无需用户输入。
存在其他形式的聚类,基于密度(聚类被视为对象异常常见的区域)或分布(聚类是遵循给定概率分布的对象集)。例如,在Computational cluster validation in post-genomic data analysis中实现的基于模型的聚类允许通过跨越不同数量的聚类的方差 - 协方差矩阵的形状范围来识别多变量数据集中的聚类,并选择最佳聚类。根据{{3}}标准建立模型。
这是分类中的一个热门话题,一些研究侧重于SVM来检测异常值,特别是当它们被错误分类时。一个简单的谷歌查询将返回大量的点击,例如Thongkam等人Cross Validated。 (计算机科学讲义 2008 4977/2008 99-109;本文包括与集合方法的比较)。最基本的想法是使用一类SVM通过拟合多变量(例如,高斯)分布来捕获数据的主要结构;边界上或边界外的物体可能被视为潜在的异常值。 (从某种意义上说,基于密度的聚类在预测分布的情况下,确定异常值的实际情况会更为直接。)
在Google上很容易找到其他无监督,半监督或监督学习的方法,例如
相关主题是Survey of Outlier Detection Methodologies,您可以在其中找到大量论文。
这确实值得一个新的(可能更集中的)问题: - )
答案 1 :(得分:3)
1)我们能否使用k-means找到异常值,这是一种好方法吗?
基于群集的方法是查找群集的最佳方法,可用于检测异常值 副产品。在聚类过程中,异常值可以影响聚类中心的位置,甚至可以聚合为微聚类。这些特征使基于集群的方法不适用于复杂的数据库。
2)是否有任何聚类算法不接受用户的任何输入?
也许你可以在这个主题上获得一些有价值的知识: Dirichlet Process Clustering
基于Dirichlet的聚类算法可以根据观测数据的分布自适应地确定聚类数。
3)我们可以使用支持向量机或任何其他监督学习算法进行离群检测吗?
任何监督学习算法都需要足够的标记训练数据来构建分类器。但是,平衡的训练数据集并不总是可用于实际问题,例如入侵检测,医疗诊断。根据Hawkins Outlier(“异常值的识别”,Chapman和Hall,伦敦,1980)的定义,正常数据的数量远远大于异常值。大多数有监督的学习算法无法在上述不平衡数据集上实现有效的分类器。
4)每种方法的优缺点是什么?
在过去的几十年中,异常值检测的研究从全局计算到局部分析不等,异常值的描述从二元解释到概率表示不等。根据离群检测模型的假设,离群检测算法可分为四种:基于统计的算法,基于聚类的算法,基于最近邻的算法和基于分类器的算法。关于离群值检测有几个有价值的调查:
Hodge,V。和Austin,J。“离群检测方法的调查”,人工智能评论期刊,2004年。
Chandola,V。和Banerjee,A。和Kumar,V。“Outlier detection:A survey”,ACM Computing Surveys,2007。
答案 2 :(得分:2)
k-means对数据集中的噪声非常敏感。当您事先删除异常值时,它最有效。
没有。声称无参数的任何聚类分析算法通常都受到严格限制,并且通常具有隐藏参数 - 例如,常用参数是距离函数。任何灵活的聚类分析算法至少会接受自定义距离函数。
一类分类器是一种流行的机器学习方法,用于异常检测。但是,监督方法并不总是适合检测_previously_unseen_对象。此外,当数据已包含异常值时,它们可能会过度拟合。
每种方法都有其优点和缺点,这就是它们存在的原因。在实际设置中,您必须尝试其中大部分内容才能查看适用于您的数据和设置的内容。这就是异常值检测被称为知识发现的原因 - 您必须探索是否要发现 new ...
答案 3 :(得分:1)
您可能需要查看ELKI data mining framework。据推测,它是异常检测数据挖掘算法的最大集合。它是用Java实现的开源软件,包含20多种异常值检测算法。请参阅list of available algorithms。
请注意,大多数这些算法不基于群集。许多聚类算法(特别是k-means)将尝试聚集实例“无论如何”。只有少数聚类算法(例如DBSCAN)实际上考虑的情况可能并非所有实例都属于集群!因此,对于某些算法,异常值实际上会阻止良好的聚类!