答案 0 :(得分:14)
这个想法是迭代地将你的云点分成两部分。换句话说,您构建一个随机二叉树,其中每个拆分(一个有两个子节点的节点)对应于在2中拆分云点。
你从一堆积分开始。
计算其质心(重心)w
在云点
将构造点cR作为cL的对称点与w相比(段cL-> w与w-> cR相同)
将云的点分成两部分,最接近cR的点属于一个子云R,而最接近cL的点属于子云L
重申子云R&L
注意:
您可以在使用它们后丢弃随机点。但是,请保留所有子模的质心。
当你的subcloud只包含一个点时停止。
如果你想要k个簇,只需取k个质心,使它们包含初始云的所有点。如果你想要的话,你可以做更多精心设计的东西(最小化云的变化等等)。假设你想要4个集群(为了方便你的功率为2)那么你只需要将云切成两半,然后每个二分云。如果你想要8个簇,那么再将这些子云切成两次。再次为16个集群。
如果你想要K群的K不是2的幂(比方说24),那么看看最接近的2的次幂。这是16.你仍然缺少8个集群。每个“16级集群”都是“16级子云”的质心。你要做的是采用8“16级集群”(例如随机)并用两个“子”“级别-32-集群”替换它们。 (这两个子级“32级集群”对应于两个“级别-32-subclouds”,它们加起来为父级“level-16-subcloud”)