数据集中的组检测

时间:2010-01-12 20:58:35

标签: algorithm statistics probability feature-detection

假设一组数据点,例如此处绘制的数据点(此图不是我的问题所特有的,只是用作一个合适的例子):

直观地检查散点图,很明显数据点形成两个“组”,其中一些随机点显然不属于任何一个。

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

  • 从两个或多个维度的数据集开始。
  • 从数据集中检测此类组,而不事先知道可能存在多少(或者如果有)
  • 一旦检测到群组,“询问”群组模型,如果新的样本点似乎适合任何群体

3 个答案:

答案 0 :(得分:5)

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

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

您对组件数量未知的要求会使您的模型更加复杂。主导概率方法是在混合分布之前放置Dirichlet过程并通过一些贝叶斯方法估计。例如,请参阅this paper on infinite Gaussian mixture models。 DP混合模型将为您提供有关组件数量和每个元素所属组件的推断,这正是您想要的。或者,您可以对组件数量进行模型选择,但这通常不太优雅。

DP混合模型有很多实现模型,但它们可能不那么方便。例如,这是一个Matlab implementation

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

答案 1 :(得分:3)

我认为你正在寻找k-means clustering algorithm

的内容

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

答案 2 :(得分:2)

您需要一种群集算法。所有这些都可分为两组:

  1. 指定组(群集)的数量 - 示例中的2个群集
  2. 算法尝试自己猜测正确的聚类数
  3. 如果你想要第一类算法,那么K-Means就是你真正需要的。

    如果你想要第二类算法,那么你可能需要一种分层聚类算法。我还没有实现任何一个。但是我看到了以这种方式改进K-means的简单方法,因为没有必要指定簇的数量。