merge - 如何合并不同聚类方法的聚类结果?
问题描述
问题:在我看来,聚类方法的一个基本属性c()
是我们是否可以将结果c(A)
和两个聚类c(B)
的某些功能组合在一起f()
,这样我们就不必c(A+B)
再次应用完整的聚类,而是这样做f(c(A),c(B))
并且仍然以同样的结果:
c(A+B) == f(c(A),c(B))
我认为某些c()
具有此属性的必要条件是它是确定性的,即其内部处理的顺序与结果无关。但是,这可能还不够。
f()
有一些参考可以在哪里查找哪些集群方法支持这一点以及在各自的情况下看起来是什么样的,这将是非常好的。
示例:目前我正在考虑 DBSCAN,如果我允许边界点同时属于多个集群(不连接它们),这应该是确定性的:
- 如果一个点在其 eps-neighborhood 中,则它可以从另一点到达
- 核心点是至少 minPts 可达的点
- 一条边从每个核心点延伸到从它可以到达的所有点
- 从核心点传入边缘的每个点都与后者在同一个簇中
如果您错过了噪声点,则假设每个核心节点都到达自身(自反性),然后我们将噪声点定义为大小为 1 的集群。边界点是非核心点。之后,如果我们想要一个分区,我们可以将多个集群中的边界点随机分配给其中一个。我认为这与方法本身无关。
解决方案
假设唯一有效的聚类是单链接层次聚类,因为从 A x A 和 B x B 中删除的边对于找到连接集的 MST 不是必需的。
对于 DBSCAN 来说,您会遇到添加数据时核心点属性会发生变化的问题。因此 c(A+B) 可能具有在 A 和 B 中都不是核心的核心点。这可能导致集群合并。f() 据说需要重新检查所有数据点,即重新运行 DBSCAN。虽然您可以利用子集的核心点必须是整个集合的核心,但您仍然需要找到邻居和缺失的核心点。
推荐阅读
- batch-file - 以编程方式获取类似于计算机管理\共享文件夹\打开文件的打开文件信息?(服务器 2012R2)
- javascript - 不能在 Three.JS 中为网格使用材料数组
- python - Python 类和继承。调用超级方法返回错误
- node.js - 我应该安装一个还是两个 ssl 证书?
- bash - 读取 Dockerfile 中的文件路径列表并将每个文件从一个构建阶段复制到另一个构建阶段
- sql-server - 完全外部联接的问题
- javascript - 成功后Ajax加载关闭div
- python - Scipy.misc.imresize() 与 cv2.resize()
- php - 无法弄清楚如何使用适用于 Linux 和 composer 的 Windows 子系统运行 box\Spout
- c# - 带有 for next 循环的 ObservableCollection