2012-03-29 52 views
0

我正在嘗試使用NLTK KMeans集羣對一些向量進行集羣。我有一些10維向量,當我試圖集羣他們,NLTK有時會象這樣的錯誤:在使用NLTK KMeans集羣時發生AssertionError

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

從我所看到的源代碼(雖然它可能是一個不同的版本NLTK的)

感謝,似乎斷言語句在功能_centroid。這個函數的目的是計算一個簇的質心。如果一個簇沒有點,那麼計算一個質心是沒有意義的,所以_centroid的第一行檢查這個條件。

現在,如果一個集羣中有0點,這可能意味着任何數量的取決於你在做什麼東西。也許這是一個錯誤條件,也許它意味着集羣可以被丟棄,也許你想用其他集羣中的點重新填充這個集羣....不管。所以它是用戶可能想知道的東西,但它不一定被當作錯誤來處理,因爲它不一定是錯誤條件。

順便說一句,我正在研究的來源副本是this