假设一组数据点,例如此处绘制的数据点(此图并非针对我的问题,仅用作合适的示例):
从视觉上检查散点图,很明显数据点形成了两个“组”,其中一些随机点显然不属于任何一个。
我正在寻找一种算法,它可以让我:
- 从两个或多个维度的数据集开始。
- 在事先不知道可能存在多少(或如果有)的情况下从数据集中检测此类组
- 一旦检测到组,“询问”组的模型,如果一个新的样本点似乎适合任何组
假设一组数据点,例如此处绘制的数据点(此图并非针对我的问题,仅用作合适的示例):
从视觉上检查散点图,很明显数据点形成了两个“组”,其中一些随机点显然不属于任何一个。
我正在寻找一种算法,它可以让我:
有很多选择,但如果您对新数据点属于特定混合的概率感兴趣,我会使用概率方法,例如通过最大似然估计或贝叶斯估计的高斯混合建模。
混合模型的最大似然估计在 Matlab 中实现。
您对组件数量未知的要求使您的模型更加复杂。主要的概率方法是在混合分布上先放置一个狄利克雷过程,并通过一些贝叶斯方法进行估计。例如,请参阅这篇关于无限高斯混合模型的论文。DP 混合模型将为您推断组件的数量以及每个元素所属的组件,这正是您想要的。或者,您可以对组件数量执行模型选择,但这通常不太优雅。
DP混合模型模型有很多实现,但它们可能不那么方便。例如,这是一个Matlab 实现。
您的图表表明您是 R 用户。在这种情况下,如果您正在寻找预先打包的解决方案,您的问题的答案就在此Task View for cluster analysis中。
我认为您正在寻找类似于k-means clustering algorithm的东西。
您应该能够在大多数通用语言中找到足够的实现。
您需要一种聚类算法。所有这些都可以分为 2 组:
如果您想要第一种类型的算法,那么 K-Means 就是您真正需要的。
如果你想要第二种类型的算法,那么你可能需要一种层次聚类算法。我从来没有实施过它们中的任何一个。但我看到了一种改进 K-means 的简单方法,无需指定集群的数量。