【问题标题】:Multiple iterations of k means in pythonpython中k均值的多次迭代
【发布时间】:2018-09-01 16:34:44
【问题描述】:

我有一个大小为 (n_samples, 2) 的数据集 X。它们与 k-means (k=3) 相当一致地形成 3 个集群,我想运行 3-means 10,000 次以验证集群模式的一致性。通过这样做,我得到一个数据框,如:

sample_name | iter1 | iter2 | iter3 | ...
------------|-------|-------|-------|
x1          | 1     | 0     | 1     |
x2          | 1     | 0     | 1     |
x3          | 1     | 0     | 2     |
x4          | 0     | 1     | 2     |
x5          | 0     | 1     | 2     |
x6          | 0     | 1     | 2     |
x7          | 2     | 2     | 0     |
x8          | 2     | 2     | 0     |
x9          | 2     | 2     | 0     |

...以此类推,最多 10,000 次迭代(列),其中 '0'、'1' 和 '2' 是 k-means 分配的集群标签。如示例中所示,数据集群非常好,但是为这些集群赋予的(任意)名称在每次运行时都会发生变化。如何将命名标准化为:

sample_name | iter1 | iter2 | iter3 | ...
------------|-------|-------|-------|
x1          | a     | a     | a     |
x2          | a     | a     | a     |
x3          | a     | a     | b     |
x4          | b     | b     | b     |
x5          | b     | b     | b     |
x6          | b     | b     | b     |
x7          | c     | c     | c     |
x8          | c     | c     | c     |
x9          | c     | c     | c     |

这样我最终可以通过向下迭代行来获得每个 x_i 的集群成员的多数票吗?

【问题讨论】:

  • 我非常怀疑你能做些什么,集群可能是相同的,但它们可以按任何顺序标记。不,这不是你可以改变的。
  • 可能有很多先进的技术(假设一个正式的任务)。为什么不这样做:在每个 kmeans 之后获取质心;订购它们(在您的 2d 的情况下;例如从左下角到右上角):根据此顺序标记。

标签: python-3.x cluster-analysis


【解决方案1】:

您需要重新标记集群,例如在最大重叠时。

有不同的策略。您可以贪婪地尝试通过最大重叠进行匹配,或者您可以使用匈牙利算法。但只需 3 个集群,您就可以采用蛮力方法,只需测试所有 6 种可能的排列,找出最匹配的一种。

由于这个问题,大多数评估措施都会忽略实际标签。他们改为处理点对。

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2016-07-29
    • 2017-07-07
    • 2015-02-09
    相关资源
    最近更新 更多