如何识别球树中所有包含点都在一个聚类中的内部节点?

我正在阅读《数据挖掘:实用机器学习工具与技术第三版》这本书。在第4.8节聚类部分,它讨论了如何使用k-d树球树来提高k-means算法的性能。

在用所有数据点构建球树后,它会搜索所有叶节点,看看这些节点中的点分别靠近哪个预选的聚类中心。它提到,有时由较高层次的内部节点代表的区域完全落在一个单一聚类中心的范围内。那么我们就不需要遍历它的子节点,所有数据点可以一次性处理完毕。

问题是,在实现数据结构和算法时,我们如何判断一个内部节点所指的区域是否落入一个单一聚类中心?

在二维或三维空间中,这并不困难。我们可以查看聚类中心每对之间的中垂线是否穿过内部节点所指的区域。

但在更高维度的空间中,该如何识别呢?是否有通用的方法论?


回答:

你需要考虑最大和最小距离。

如果一个空间对象(比如半径为r的球体)到所有其他均值的最小距离大于到某一个均值的最大距离,那么容器内的所有对象都将属于那个均值。因为如果

maxdist(mean_i, container) < min of all j != i mindist(mean_j, container)

那么特别是对于容器内的任何对象

dist(mean_i, obj_in_container) < min of all j != i dist(mean_j, obj_in_container)

即该对象将属于均值i。

在任意维度上,球体和矩形的最小和最大距离可以很容易地计算出来。然而,在更高维度中,mindist和maxdist变得非常相似,且该条件很少成立。此外,如果你的树结构良好(即小容器)或结构不好(重叠容器),这会产生巨大的差异。

k-d树适用于内存中只读操作。对于插入操作,它们的表现相当差。R*-树在这方面表现得更好。此外,R*-树改进的分割策略是有回报的,因为它生成的盒子比其他策略更接近矩形。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注