2016-07-08 3 views
1

J'essaie de faire un regroupement agglomératif en utilisant sklearn. Dans l'étape d'ajustement, j'obtiens cette erreur. L'erreur ne s'affiche pas tout le temps, si je change le nombre de points de données alors je ne peux pas obtenir l'erreur et le regroupement agglomératif. Je ne suis pas sûr de savoir comment déboguer ça. J'ai veillé à ce qu'il n'y ait pas de valeurs NaN dans mon tableau de données avec fillnan. Toute idée de pourquoi cela pourrait se produire serait utile.sci-kit apprendre l'erreur de regroupement agglomératif

--------------------------------------------------------------------------- 
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

Avez-vous un exemple minimal pour travailler avec nous? – edwinksl

Répondre

1

Ceci est un problème de débordement, notez que 4999850001-2 ** 32 = 704882705 (dernière ligne de votre sortie). Quelque chose est trop gros pour tenir dans un entier de 32 bits. Vous devriez essayer d'utiliser moins de points de données.

+0

Vous avez probablement raison, car il semble fonctionner quand j'ai moins de 1e3 enregistrements. Des idées comment je peux résoudre cela? (J'ai environ 1e5 enregistrements ..) – ROBOTPWNS

+0

10k dossiers ne sont pas nombreux, quelque chose d'autre doit être la cause du débordement. Combien de temps sont vos vecteurs d'entrée? Quelle est la portée des nombres en eux? Avez-vous appliqué une étape de pré-traitement (par exemple, les normaliser d'une manière ou d'une autre)? – dkar

+0

Le vecteur de données est 24 x 10k. J'ai normalisé les données dans le pré-traitement de sorte qu'ils sont tous flottants entre 0 et 1. – ROBOTPWNS