python 凝聚层次聚类_Python中的层次聚类凸壳

我正在使用层次聚类来尝试可视化已被展平为二维的大量数据 . 我想要做的是创建一个可视化,允许我通过将簇作为其组成点的凸包来查看层次结构中不同高度的数据 . 这个问题中最棘手的部分是我需要一种能够在向上移动层次结构时有效地合并对簇的凸包的算法 . 我已经看到很多用于计算O(n log n)时间点的凸包的算法,但在这种情况下似乎更有效地利用问题的子结构,但我是不确定如何 .

Edit:

有关更多信息,数据结构是一个以聚类的原始点开头的数组,然后说明哪些点/聚类组合在一起形成下一个聚类 . 所以它有点像树/指针结构,但包含在一个大数组中 . 重要的一点是,查看两个组成集群的任何超级集群是否有效,但获取属于集群的所有点的集合效率不高 . 所以任何合理的算法都必须自下而上 .

所以我们假设我们在某个地方的层次结构中间,并且预先计算的层次结构表明集群A和B被合并以产生集群C.我们从下往上,所以我们已经计算了凸包的凸包 . 集群A和B中的点,所以我们只需要将它们组合起来就可以产生集群C的凸包 . 集群A的凸包实际上可以是单个点,一对或一个完整的多边形 . 对于集群B来说也是如此 . 因此,有几种情况应该如何合并以形成集群C的凸包,但我敢打赌,这是一个聪明的解决方案,可能会对待单体并以与多边形相同的方式进行配对 .

最明显的解决方案是使用来自集群A和B的凸包的组合点来计算凸包 . 但是我需要在100k点的层次结构上执行此操作,所以我想知道是否更有效结合A和B凸壳的方法

Edit 2:

/----5

1---/ / \

/ \ / B 8

2 A 3 C 6 /

\ / \ /

4--------7

好的,所以我试图用ASCII来说明我的意思 . A组凸壳为1-2-3-4,B的凸壳为5-6-7-8,C的凸壳为1-2-4-7-8-5 . 据推测,集群A和B在其船体内部包含额外的点,但这些明显不可能成为C船体的一部分,因此问题是一种算法确定在哪里“拼接”集群A和B的船体以形成C的船体,基于点的坐标 . 这是整个过程的归纳步骤 . (最终C将与群集D组合,依此类推,直到算法以最顶层的群集结束,其将具有作为其凸包的所有点的凸包) .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值