基于 C# 中数据点的接近度为数据创建集群

Creating clusters for data based on proximity of data points in C#

我有一个包含在 List<Point4D> allPoints 中的数据点集合,其中每个 Point4D point 由一个包含其在 space 中的 x、y、z 位置的节点表示(point.X , point.Y , point.Z) 及其幅度值 ( point.W )。数据点表示物体上的各个应力点,因此物体上存在各种数据点簇,其中数据点非常接近并且具有相似的大小。

我希望能够确定这些集群的位置以及它们包含哪些数据点。用户需要能够看到集群并且(最终)能够根据 size/number 或 points/stress 值大小等来过滤它们(这不是我现在主要关心的问题)。

现在,我只想围绕每个集群中包含的数据点生成一种 "bubble",这样我就可以单独显示每个集群。

我已经尝试实施 K-means 但卡住了,因为我需要事先知道有多少集群(至少,这是我发现的所有实施中的要求)。出于我的目的,我不会事先知道有多少个集群或它们在哪里;此信息因当前正在分析的数据集而异(数据从用户上传的 .csv 文件导入)。

如有任何想法,我们将不胜感激!

Thr 通常的方法是 运行 k-means 多次针对不同的 k,然后通过一些启发式方法(例如(愚蠢的)肘部方法)选择 "best"。更好的选择包括 VRC,但应该非常清楚,没有普遍最佳的 kz,您的应用程序可能是一个示例,您可能需要比通过此类方法找到的 "best" 更大的 k。

还有一些变体,例如 x-means 和 g-means,它们会在聚类期间尝试"learn k",主要是通过尝试拆分聚类,只要启发式有所改进。