【问题标题】:Python: validation k-means clusteringPython:验证 k 均值聚类
【发布时间】:2016-05-20 06:39:04
【问题描述】:

我想比较使用sklearn 的 k-means 库计算的两个不同集群。

from sklearn.cluster import KMeans

ya = KMeans(n_clusters=3).fit_predict(Xa)
yb = KMeans(n_clusters=3).fit_predict(Xb)

在哪里

ya
array([0, 2, 1, 1, 2, 2, 0, 2, 2, 1, 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 2, 2, 2,
       2, 2, 0, 2, 0, 2, 0, 2, 2, 2, 0, 0, 1, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2,
       2, 0, 1, 0, 2, 2, 2], dtype=int32)

yb
array([1, 2, 0, 0, 2, 2, 1, 2, 2, 0, 1, 1, 0, 2, 1, 0, 1, 1, 1, 1, 2, 2, 2,
       2, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1, 1, 0, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2,
       2, 1, 0, 1, 2, 2, 2], dtype=int32)

集群相同,但标签不同。为了计算我所做的差异:

sm = difflib.SequenceMatcher(None,list(ya),list(yb))
sm.ratio()

当然,由于标签,它不起作用。有没有办法比较两个集群?

【问题讨论】:

    标签: python cluster-analysis k-means


    【解决方案1】:

    比较聚类(或聚类和类!)的常用方法是 调整后的兰德指数 (ARI)。

    正好解决了簇数变化的问题。

    【讨论】:

      【解决方案2】:

      通常,使用confusion matrix 对具有已知目标的聚类进行评估。您可以在您的情况下使用它,即使两者都不是真正的目标。

      如果您只想直接比较数组,您可以将一个数组的值映射到另一个数组:

      ya = np.array([{0:1, 2:2, 1:0}[a] for a in ya])
      

      【讨论】:

      • 我的问题是标签不同,即使两个集群相同
      • 我更新了从一个数组映射到另一个数组的答案 - 这行得通吗?
      • 问题是标签似乎是随机的,你不知道它是如何变化的
      • 我认为这取决于算法的初始化。如果将随机状态种子设置为整数,则每次都应该得到相同的结果。
      【解决方案3】:

      我是这样解决的,可能不是很优雅,但确实有效

      ya = KMeans(n_clusters=3).fit_predict(Xa)
      yb = KMeans(n_clusters=3).fit_predict(Xb)
      
      ya= KMeans(n_clusters=3).fit_predict(Xa)
      cla = list()
      m = 0
      for i in range(0,3):
          tmp = np.where(ya == i)
          cla.append(list(tmp[0]))
      cla = sort(cla)
      
      
      yb= KMeans(n_clusters=3).fit_predict(Xb)
      clb = list()
      m = 0
      for i in range(0,3):
          tmp = np.where(yb == i)
          clb.append(list(tmp[0]))
      clb = sort(clb)
      e = 0
      for i in range(0,3):
          sm = difflib.SequenceMatcher(None,list(cla[i]),list(clb[i]))
          e += 1 - sm.ratio()
      

      【讨论】:

        猜你喜欢
        • 2014-07-24
        • 2015-02-09
        • 2017-12-30
        • 2017-01-15
        • 2012-06-18
        • 2020-12-18
        • 2019-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多