将新文档添加到现有集群中

Posted

技术标签:

【中文标题】将新文档添加到现有集群中【英文标题】:Adding new document into existing cluster 【发布时间】:2021-05-10 06:59:26 【问题描述】:

我正在为大型数据集进行聚类(kmeans)。现在想将新数据添加到现有集群中。

这是我的想法:

    计算一个新数据点与所有质心的欧几里得距离,并找出这些距离中的最小值。

    检查最小距离是否小于阈值。如果为真,我们将新数据点分配给相应的集群。然后,更新该集群的集群中心。

    如果为 False,则创建一个新集群并将新数据点分配为其中心。此外,数据点成为集群的一部分。

在第 2 步中,我应该使用什么阈值。请分享您的想法。

我在想,通过计算每个集群的集群内距离并取它们的最大距离将是我的阈值。

我在关注文章here

【问题讨论】:

【参考方案1】:

您不能使用轮廓分数等内部验证来代替阈值,来查看您是否需要将集群数量加一或仅将新数据点拟合到现有集群之一?

并且,关于您关于阈值的建议,假设您有两个彼此相距较远的集群 C1 和 C2(假设它们的中心之间的距离为 10),并且它们的中心与最远成员之间的距离为 1 和 1.1 .现在,您有一个新点,其与 C1 (更新或原始)中心的距离为 1.2。你的电话是什么?由于它比 1 略大,但同时又比 1.1 大,你只需将它放入一个新的集群中(?!)。如您所见,这不是一个合理的方法。

如果坚持使用阈值,这里有个思路:可以求新点到最近的中心(称为d1)和下一个最近的中心(称为d2)的距离。例如,如果 d1/d2 小于 0.5(阈值),您可以说新点属于最近的组,如果不是,则意味着您无法确定它属于哪个组。所以,你然后创建一个新的集群

【讨论】:

谢谢@Nima S,您对我提出的方法是正确的。我不能使用剪影分数,因为我的数据集非常大,计算剪影分数非常昂贵。我尝试了您提出的方法(d/d2)。在这里,0.5的阈值也不是一个完美的选择,我玩了很多,但无法选择完美的阈值。

以上是关于将新文档添加到现有集群中的主要内容,如果未能解决你的问题,请参考以下文章

将新节点添加到 Clickhouse 集群的正确方法是啥?

将现有 GKE 集群添加到 terraform stat 文件

cassandra 调试问题

将节点添加到现有 Cassandra 集群

如何使用 pymongo 将新的值数组附加到 mongodb 中的现有数组文档?

K8s - 将 kubeadm 添加到现有集群