7

假设一组数据点,例如此处绘制的数据点(此图并非针对我的问题,仅用作合适的示例):

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

我正在寻找一种算法,它可以让我:

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

3 回答 3

5

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

混合模型的最大似然估计在 Matlab 中实现

您对组件数量未知的要求使您的模型更加复杂。主要的概率方法是在混合分布上先放置一个狄利克雷过程,并通过一些贝叶斯方法进行估计。例如,请参阅这篇关于无限高斯混合模型的论文。DP 混合模型将为您推断组件的数量以及每个元素所属的组件,这正是您想要的。或者,您可以对组件数量执行模型选择,但这通常不太优雅。

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

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

于 2010-01-12T22:14:13.457 回答
3

我认为您正在寻找类似于k-means clustering algorithm的东西。

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

于 2010-01-12T21:01:45.990 回答
2

您需要一种聚类算法。所有这些都可以分为 2 组:

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

如果您想要第一种类型的算法,那么 K-Means 就是您真正需要的。

如果你想要第二种类型的算法,那么你可能需要一种层次聚类算法。我从来没有实施过它们中的任何一个。但我看到了一种改进 K-means 的简单方法,无需指定集群的数量。

于 2010-01-12T22:39:11.783 回答