使用NLTK KMeans群集时出现AssertionError

时间:2012-03-29 20:14:23

标签: cluster-computing nltk k-means

我正在尝试使用NLTK KMeans群集来聚类一些向量。我有一些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

并且错误并不总是出现,有时它会出现,有时则不然。

我已经尝试了演示代码,它运行正常。

有人有提示吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

从我所看到的源代码(虽然它可能是nltk的不同版本)看来,assert语句在函数_centroid中。此函数的目的是计算集群的质心。如果一个集群没有点,那么计算一个质心就没有意义,所以_centroid的第一行检查这个条件。

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

顺便说一下,我正在审查的来源副本是this