【问题标题】:Having AssertionError when using NLTK KMeans Clustering使用 NLTK KMeans 聚类时出现 AssertionError
【发布时间】:2012-04-13 12:54:22
【问题描述】:

我正在尝试使用 NLTK KMeans Cluster 来聚类一些向量。我有一些 10 维向量,当我尝试对它们进行聚类时,NLTK 有时会出现如下错误:

Traceback (most recent call last):
  File "/home/yhz82415/workspace/Grouping/src/Driver.py", line 27, in <module>
    main()
  File "/home/yhz82415/workspace/Grouping/src/Driver.py", line 20, in main
    KMeans(numClusters, dictionary)
  File "/home/yhz82415/workspace/Grouping/src/Tools.py", line 78, in KMeans
    clusters=clusterer.cluster(vectors, True)
  File "/usr/local/lib/python2.7/dist-packages/nltk/cluster/util.py", line 51, in cluster
    self.cluster_vectorspace(vectors, trace)
  File "/usr/local/lib/python2.7/dist-packages/nltk/cluster/kmeans.py", line 70, in cluster_vectorspace
    self._cluster_vectorspace(vectors, trace)
  File "/usr/local/lib/python2.7/dist-packages/nltk/cluster/kmeans.py", line 109, in _cluster_vectorspace
    new_means = map(self._centroid, clusters)
  File "/usr/local/lib/python2.7/dist-packages/nltk/cluster/kmeans.py", line 149, in _centroid
    assert len(cluster) > 0
AssertionError

而且错误并不总是出现,有时会出现,有时不会出现。

我试过演示代码,效果很好。

有人有提示吗?

提前致谢

【问题讨论】:

    标签: cluster-computing nltk k-means


    【解决方案1】:

    从我看到的源代码(虽然它可能是不同版本的 nltk)看来,断言语句在函数 _centroid 中。此函数的目的是计算簇的质心。如果集群没有点,那么计算质心将毫无意义,因此_centroid 的第一行会针对此条件进行检查。

    现在,如果一个集群中有 0 个点,它可能意味着任何数量的事情,这取决于你在做什么。也许这是一个错误情况,也许这意味着可以处理集群,也许你想用来自其他集群的点重新填充这个集群......无论如何。所以这是用户可能想知道的事情,但不一定要作为错误处理,因为它不一定是错误条件。

    顺便说一句,我正在检查的源副本是this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 2019-11-27
      • 2013-11-18
      • 1970-01-01
      • 2012-06-30
      相关资源
      最近更新 更多