2016-07-08 15 views
1

Ich versuche agglomerative Clustering mit Sklearn zu tun. Im Anpassungsschritt erhalte ich diesen Fehler. Der Fehler taucht nicht immer auf, wenn ich die Anzahl der Datenpunkte ändere, bekomme ich möglicherweise den Fehler und das agglomerative Clustering nicht. Ich bin mir nicht sicher, wie das zu debuggen ist. Ich habe sichergestellt, dass es in meinem Datenarray bereits keine NaN-Werte mit fillnan gibt. Jede Idee, warum dies passieren könnte, wäre hilfreich.sci-kit lernen agglomerative Clustering-Fehler

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-38-8acbe956f76e> in <module>() 
    13  agg = AgglomerativeClustering(n_clusters=k,affinity="euclidean",linkage="ward") 
    14  init = time.time() 
---> 15  agg.fit(data) 
    16  atime = time.time() 
    17  labels = agg.labels_ 

C:\Python27\lib\site-packages\sklearn\cluster\hierarchical.pyc in fit(self, X, y) 
    754          n_components=self.n_components, 
    755          n_clusters=n_clusters, 
--> 756          **kwargs) 
    757   # Cut the tree 
    758   if compute_full_tree: 

C:\Python27\lib\site-packages\sklearn\externals\joblib\memory.pyc in __call__(self, *args, **kwargs) 
    279 
    280  def __call__(self, *args, **kwargs): 
--> 281   return self.func(*args, **kwargs) 
    282 
    283  def call_and_shelve(self, *args, **kwargs): 

C:\Python27\lib\site-packages\sklearn\cluster\hierarchical.pyc in ward_tree(X, connectivity, n_components, n_clusters, return_distance) 
    189       'for the specified number of clusters', 
    190       stacklevel=2) 
--> 191   out = hierarchy.ward(X) 
    192   children_ = out[:, :2].astype(np.intp) 
    193 

C:\Python27\lib\site-packages\scipy\cluster\hierarchy.pyc in ward(y) 
    463 
    464  """ 
--> 465  return linkage(y, method='ward', metric='euclidean') 
    466 
    467 

C:\Python27\lib\site-packages\scipy\cluster\hierarchy.pyc in linkage(y, method, metric) 
    662    Z = np.zeros((n - 1, 4)) 
    663    _hierarchy.linkage(dm, Z, n, 
--> 664        int(_cpy_euclid_methods[method])) 
    665  return Z 
    666 

scipy\cluster\_hierarchy.pyx in scipy.cluster._hierarchy.linkage (scipy\cluster\_hierarchy.c:8759)() 

C:\Python27\lib\site-packages\scipy\cluster\_hierarchy.pyd in View.MemoryView.memoryview_copy_contents (scipy\cluster\_hierarchy.c:22026)() 

C:\Python27\lib\site-packages\scipy\cluster\_hierarchy.pyd in View.MemoryView._err_extents (scipy\cluster\_hierarchy.c:21598)() 

ValueError: got differing extents in dimension 0 (got 704882705 and 4999850001) 
+1

Haben Sie ein minimales Beispiel für die Zusammenarbeit? – edwinksl

Antwort

1

Dies ist ein überquellendes Problem, beachten Sie, dass 4999850001-2 ** 32 = 704.882.705 (letzte Zeile der Ausgabe). Etwas ist zu groß, um in eine 32-Bit-Ganzzahl zu passen. Sie sollten versuchen, weniger Datenpunkte zu verwenden.

+0

Sie haben wahrscheinlich Recht, denn es scheint zu funktionieren, wenn ich weniger als 1e3 Datensätze habe. Irgendwelche Ideen, wie ich das lösen kann? (Ich habe um 1e5 Datensätze ..) – ROBOTPWNS

+0

10k Datensätze sind nicht viele, etwas anderes muss die Ursache für den Überlauf sein. Wie lang sind deine Eingabevektoren? Was ist der Bereich der Zahlen in ihnen? Haben Sie einen Vorverarbeitungsschritt auf sie angewendet (z. B. auf irgendeine Weise normalisieren)? – dkar

+0

Der Datenvektor ist 24 x 10k. Ich habe die Daten in der Vorverarbeitung normalisiert, so dass sie alle zwischen 0 und 1 schweben. – ROBOTPWNS