代码之家  ›  专栏  ›  技术社区  ›  Sami

数据集中的组检测

  •  7
  • Sami  · 技术社区  · 14 年前

    假设有一组数据点,例如这里绘制的数据点(此图不是针对我的问题,只是作为一个合适的示例使用):。

    从视觉上观察散点图,很明显数据点形成了两个“组”,其中一些随机点显然不属于任何一个组。

    我在找一个算法,它允许我:

    • 从两个或多个维度的数据集开始。
    • 从数据集中检测这些组,而事先不知道可能有多少组(或如果有)。
    • 一旦检测到组,“询问”组的模型,如果新的采样点似乎适合任何组
    • 从视觉上观察散点图,很明显数据点形成了两个“组”,其中一些随机点也不明显属于这两个组。

      我正在寻找一种算法,它允许我:

      • 从两个或多个维度的数据集开始。
      • 从数据集中检测这些组,而事先不知道可能有多少组(或如果有)。
      • 一旦检测到组,“询问”组的模型,如果新的采样点似乎适合任何组
    3 回复  |  直到 14 年前
        1
  •  5
  •   Tristan    14 年前

    有许多选择,但是如果您对新数据点属于特定混合的概率感兴趣,我将使用概率方法,例如高斯混合建模,或者使用最大似然估计,或者使用贝叶斯估计。

    最大似然估计 mixtures models is implemented in Matlab .

    您对组件数量未知的要求使您的模型更加复杂。主要的概率方法是将迪里克莱过程先于混合分布,然后用贝叶斯方法进行估计。例如,请参见 this paper on infinite Gaussian mixture models . dp混合模型将为您提供关于组件数量和每个元素所属组件的推断,这正是您想要的。或者,您可以对组件的数量执行模型选择,但这通常不那么优雅。

    dp混合模型的实现有很多种,但可能不太方便。例如,这里有一个 Matlab implementation .

    你的图表表明你是一个R用户。在这种情况下,如果您正在寻找预先打包的解决方案,那么问题的答案就在于此 Task View for cluster analysis .

        2
  •  3
  •   ConsultUtah    14 年前

    我想你在找一个符合 k-means clustering algorithm .

    您应该能够在大多数通用语言中找到适当的实现。

        3
  •  2
  •   Roman    14 年前

    您需要一种聚类算法。它们可以分为两组:

    1. 您可以在示例中指定组(集群)的数量-2个集群
    2. 算法试图自己猜测正确的簇数。

    如果你想要第一类的算法,那么k-均值就是你真正需要的。

    如果您想要第二种类型的算法,那么您可能需要一种层次聚类算法。我从来没有实现过它们中的任何一个。但是我看到了一个简单的方法来改进k均值,这样就不需要指定集群的数量。