我正在尝试使用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
并且错误并不总是出现,有时它会出现,有时则不然。
我已经尝试了演示代码,它运行正常。
有人有提示吗?
提前致谢
答案 0 :(得分:0)
从我所看到的源代码(虽然它可能是nltk的不同版本)看来,assert语句在函数_centroid
中。此函数的目的是计算集群的质心。如果一个集群没有点,那么计算一个质心就没有意义,所以_centroid
的第一行检查这个条件。
现在,如果群集中有0个点,则可能意味着任何数量的事情取决于您正在做什么。也许这是一个错误条件,也许这意味着可以处理集群,也许你想用其他集群中的点重新填充这个集群....无论如何。所以这是用户可能想知道的东西,但它不一定是作为错误处理的,因为它不一定是错误条件。
顺便说一下,我正在审查的来源副本是this