【问题标题】:Bisecting k-means clustering algorithm explanationBisecting k-means 聚类算法解释
【发布时间】:2011-10-15 20:03:22
【问题描述】:

我被要求编写一个二等分 k-means 算法,但我不明白该算法。 我知道 k-means 算法。

你能解释一下算法,但不是academic language

谢谢。

【问题讨论】:

    标签: algorithm cluster-analysis k-means


    【解决方案1】:

    这个想法是迭代地将您的点云分成两部分。换句话说,您构建一棵随机二叉树,其中每个分裂(一个具有两个子节点的节点)对应于将云的点分裂为 2。

    你从一团点开始。

    • 计算其质心(重心)w

    • 在云的点中随机选择一个点cL

    • 构造点cR作为cL与w比较的对称点(段cL->w与w->cR相同)

    • 把你的云点一分为二,离cR最近的点属于子云R,离cL最近的点属于子云L

    • 重申子云 R 和 L

    注意事项:

    您可以在使用后丢弃随机点。但是,请保留所有子库的质心。

    当您的子云正好包含一个点时停止。

    如果你想要 k 个簇,只需取 k 个质心,使它们包含初始云的所有点。如果你愿意,你可以做更复杂的事情(最小化云的方差等......)假设你想要 4 个集群(为方便起见,是 2 的幂)然后你只需要将你的云分成两部分,然后每一个亚云一分为二。如果您想要 8 个集群,则将这些子云一分为二再次切割。又是 16 个集群。

    如果您想要 K 簇的 K 不是 2 的幂(比如说 24),那么请查看最接近的 2 的次幂。现在是 16。您仍然缺少 8 个集群。每个“16 级集群”是“16 级子云”的质心。你要做的是取 8 个“level-16-clusters”(例如随机)并将它们分别替换为两个“child”“level-32-clusters”。 (这两个子“level-32-clusters”对应两个“level-32-subcloud”,它们加起来就是父级“level-16-subcloud”)

    【讨论】:

    • 感谢您的回答,现在清楚多了。但是我有两件事我不明白 - “在云的点中随机选择一个点 cL” - 意味着我需要选择一个随机向量?第二件事 - 我不明白我需要为 K 个集群做什么?
    • 嗯,你有一堆想要聚类的点,对吧?在云中选择一个点意味着......在云中选择一个点=)我不完全明白你所说的随机向量的意思......在云的点中选择,而不是在整个空间中随机选择。我已经更新了关于 K 个集群的帖子
    • 我猜是向量平均点 =] 但是如果我的随机选择不好并导致不均匀的分裂簇怎么办?我虽然在做:每件事我都会选择 SSE 最大的集群——你怎么看?
    • 我认为该算法看起来很……糟糕。但事实上,并非如此!我认为有一百万种方法可以改进它,是的,即使我不知道什么是 SSE(顺便说一句,SSE 是什么?),你的想法肯定是好的。但我认为这个想法是快速的,并且您可以构建许多二等分 k-means,就像制作随机森林一样 (en.wikipedia.org/wiki/Random_forest)(如果您阅读链接,您应该知道二等分 k-means真的真的很像决策树)
    • 是的,它的误差平方和,谢谢。我想我会问教授他是否只是想分裂 - 就像你说的或者更聪明的东西。编辑:一件事 - 在我选择一个随机点及其对称点并将集群分成两个集群之后 - 没有对该集群进行优化?就像在常规 k-means 中一样,总是有优化,直到集群之间的点没有移动(或者移动小于 1% ...)
    猜你喜欢
    • 2019-11-25
    • 2021-11-18
    • 2021-08-06
    • 2020-03-10
    • 2017-12-01
    • 2016-07-28
    • 2014-02-02
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多