2012-03-29 16 views
0

Ich versuche, den NLTK KMeans Cluster zu verwenden, um einige Vektoren zu clustern. Ich habe einige 10-dimensionalen Vektoren, wenn ich versuchte, sie gruppieren, NLTK manchmal Fehler wie diese gibt:AssertionError bei Verwendung von NLTK KMeans Clustering

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 

Und der Fehler nicht immer kommen, manchmal tut es, manchmal nicht.

Ich habe den Demo-Code versucht, es funktioniert gut.

Hat jemand Tipps?

Vielen Dank im Voraus

Antwort

0

Von dem, was ich von dem Quellcode gesehen habe (obwohl es eine andere Version von nltk sein könnte) scheint es, dass die assert-Anweisung in der Funktion _centroid ist. Der Zweck dieser Funktion ist die Berechnung des Schwerpunkts eines Clusters. Wenn ein Cluster keine Punkte hat, wäre es sinnlos, einen Schwerpunkt zu berechnen, so dass die erste Zeile von _centroid diese Bedingung überprüft.

Nun, wenn ein Cluster 0 Punkte enthält, könnte es eine beliebige Anzahl von Dingen bedeuten, abhängig davon, was Sie tun. Vielleicht ist es eine Fehlerbedingung, vielleicht bedeutet es, dass der Cluster entsorgt werden kann, vielleicht möchten Sie diesen Cluster mit Punkten aus anderen Clustern neu bevölkern ... was auch immer. Es ist also etwas, was der Benutzer vielleicht wissen möchte, aber es sollte nicht notwendigerweise als ein Fehler behandelt werden, weil es nicht unbedingt eine Fehlerbedingung ist.

BTW, die Kopie der Quelle, die ich untersuche, ist this

Verwandte Themen