【问题标题】:Outlier detection in data mining [closed]数据挖掘中的异常值检测
【发布时间】:2011-08-26 22:22:30
【问题描述】:

我有几组关于异常值检测的问题:

  1. 我们可以使用 k-means 找出异常值吗?这是一种好方法吗?

  2. 是否有不接受用户任何输入的聚类算法?

  3. 我们可以使用支持向量机或任何其他监督学习算法进行异常值检测吗?

  4. 每种方法的优缺点是什么?

【问题讨论】:

标签: data-mining svm outliers


【解决方案1】:

我将把自己限制在我认为对你所有问题提供一些线索所必需的内容上,因为这是很多教科书的主题,它们可能最好在单独的问题中解决。

  1. 我不会使用 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
    

    从下图中可以看出,离群值永远不会像这样恢复:它将始终属于其他集群之一。

    然而,一种可能性是使用两阶段方法,其中以迭代方式移除极值点(此处定义为远离其簇质心的向量),如下文所述:Improving K-Means by Outlier Removal ( Hautamäki 等人)。

    这与基因研究中检测和移除表现出基因分型错误的个体或兄弟姐妹/双胞胎个体(或当我们想要识别人口子结构时)的做法有些相似,而我们只想保留无关的个体;在这种情况下,我们使用多维缩放(相当于 PCA,前两个轴为常数)并在前 10 或 20 个轴中的任何一个轴上移除高于或低于 6 SD 的观察值(例如,参见 @ 987654322@,Patterson 等人,PLoS 遗传学 2006 2(12))。

    一种常见的替代方法是使用有序的稳健马氏距离,可以根据卡方分布的预期分位数绘制(在 QQ 图中),如下文所述:

    R.G.加勒特 (1989)。 The chi-square plot: a tools for multivariate outlier recognition地球化学勘探杂志 32(1/3): 319-341.

    (在mvoutlier R 包中可用。)

  2. 这取决于您所说的用户输入。我将您的问题解释为某些算法是否可以自动处理距离矩阵或原始数据并停止在最佳数量的集群上。如果是这种情况,并且对于任何基于距离的分区算法,那么您可以使用任何可用的有效性指标进行聚类分析;

    中给出了一个很好的概述

    Handl, J.、Knowles, J. 和 Kell, D.B. (2005 年)。 Computational cluster validation in post-genomic data analysis生物信息学 21(15): 3201-3212.

    我在Cross Validated 上讨论过。例如,您可以在数据的不同随机样本(使用引导程序)上运行算法的多个实例,针对一系列集群数(例如,k=1 到 20),并根据考虑的优化标准选择 k(平均轮廓宽度、相关相关性等);它可以完全自动化,无需用户输入。

    还有其他形式的聚类,基于密度(聚类被视为对象异常常见的区域)或分布(聚类是遵循给定概率分布的对象集合)。例如,在Mclust 中实现的基于模型的聚类允许通过为不同数量的聚类跨越方差-协方差矩阵的形状范围来识别多变量数据集中的聚类,并根据其选择最佳模型到BIC 标准。

  3. 这是分类中的热门话题,一些研究侧重于 SVM 以检测异常值,尤其是当它们被错误分类时。一个简单的谷歌查询将返回很多点击,例如Support Vector Machine for Outlier Detection in Breast Cancer Survivability Prediction Thongkam 等人。 (计算机科学讲义 2008 4977/2008 99-109;本文包括与集成方法的比较)。最基本的想法是使用一类 SVM 通过拟合多元(例如,高斯)分布来捕获数据的主要结构;边界上或边界外的物体可能被视为潜在的异常值。 (在某种意义上,基于密度的聚类的表现与在给定预期分布的情况下定义异常值的真实情况一样好。)

    无监督、半监督或监督学习的其他方法很容易在 Google 上找到,例如


    一个相关的话题是anomaly detection,你会发现很多关于它的论文。

  4. 这确实值得提出一个新的(可能更集中的)问题 :-)

【讨论】:

    【解决方案2】:

    1) 我们可以使用 k-means 找到异常值吗,这是一种好方法吗?

    基于聚类的方法是查找聚类的最佳方法,可用于检测异常值: 副产品。在聚类过程中,异常值会影响聚类中心的位置,甚至聚合为一个微聚类。这些特点使得基于集群的方法对于复杂的数据库是不可行的。

    2) 有没有不接受用户输入的聚类算法?

    也许你可以在这个主题上获得一些有价值的知识: Dirichlet Process Clustering

    基于Dirichlet的聚类算法可以根据观测数据的分布情况自适应地确定聚类个数。

    3) 我们可以使用支持向量机或任何其他监督学习算法来检测异常值吗?

    任何监督学习算法都需要足够的标记训练数据来构建分类器。然而,平衡的训练数据集并不总是可用于现实世界的问题,例如入侵检测、医学诊断。根据 Hawkins Outlier 的定义(“Identification of Outliers”. Chapman and Hall, London, 1980),正常数据的数量远大于异常值。大多数监督学习算法都无法在上述不平衡数据集上实现高效的分类器。

    4) 每种方法的优缺点是什么?

    在过去的几十年里,异常值检测的研究从全局计算到局部分析,对异常值的描述从二进制解释到概率表示。根据异常检测模型的假设,异常检测算法可以分为四种:基于统计的算法、基于聚类的算法、基于最近邻的算法和基于分类器的算法。有几个关于异常值检测的有价值的调查:

    • Hodge, V. 和 Austin, J.“异常值检测方法的调查”,人工智能评论杂志,2004 年。

    • Chandola, V. 和 Banerjee, A. 和 Kumar, V。“异常值检测:一项调查”,ACM 计算调查,2007 年。

    【讨论】:

      【解决方案3】:
      1. k-means 对数据集中的噪声相当敏感。事先删除异常值时效果最佳。

      2. 没有。任何声称无参数的聚类分析算法通常都受到严格限制,并且通常具有隐藏参数——例如,一个常见的参数是距离函数。任何灵活的聚类分析算法都至少会接受自定义距离函数。

      3. 一类分类器是一种流行的机器学习方法来检测异常值。然而,监督方法并不总是适合检测_previously_unseen_ 对象。此外,当数据已经包含异常值时,它们可能会过拟合。

      4. 每种方法都有其优点和缺点,这就是它们存在的原因。在真实环境中,您将不得不尝试其中的大多数,以查看适合您的数据和设置的方法。这就是为什么异常值检测被称为知识发现 - 如果你想发现一些新的...

        李>

      【讨论】:

        【解决方案4】:

        您可能想看看ELKI data mining framework。它应该是异常值检测数据挖掘算法的最大集合。它是开源软件,用 Java 实现,包含大约 20 多种异常值检测算法。见list of available algorithms

        请注意,这些算法中的大多数不是基于聚类。许多聚类算法(尤其是 k-means)将尝试“无论如何”对实例进行聚类。只有少数聚类算法(例如 DBSCAN)真正考虑了可能并非所有实例都属于集群的情况!所以对于某些算法,异常值实际上会阻止一个好的聚类!

        【讨论】:

          猜你喜欢
          • 2019-02-27
          • 1970-01-01
          • 2019-01-25
          • 1970-01-01
          • 2011-07-25
          • 2011-02-07
          • 2013-06-11
          • 2016-01-07
          • 1970-01-01
          相关资源
          最近更新 更多