Les erreurs sont comme ceci:
Traceback (most recent call last):
File "NearestCentroid.py", line 53, in <module>
clf.fit(X_train.todense(),y_train)
File "/usr/local/lib/python2.7/dist-packages/scikit_learn-0.13.1-py2.7-linux-i686.Egg/sklearn/neighbors/nearest_centroid.py", line 115, in fit
variance = np.array(np.power(X - self.centroids_[y], 2))
IndexError: arrays used as indices must be of integer (or boolean) type
Les codes sont comme ça:
distancemetric=['euclidean','l2']
for mtrc in distancemetric:
for shrkthrshld in [None]:
#shrkthrshld=0
#while (shrkthrshld <=1.0):
clf = NearestCentroid(metric=mtrc,shrink_threshold=shrkthrshld)
clf.fit(X_train.todense(),y_train)
y_predicted = clf.predict(X_test.todense())
J'utilise le package scikit-learn
, X-train
, y_train
sont au format LIBSVM, X
est la fonction: paire de valeurs, y_train
est la cible/le libellé, X_train
est au format matriciel CSR, le shrink_threshold
ne prend pas en charge la matrice CSR creuse, alors j'ajoute .todense()
à X_train
, alors j'ai eu cette erreur, quelqu'un pourrait-il m'aider à résoudre ce problème? Merci beaucoup!
J'ai eu un problème similaire en utilisant le pystruct.learners.OneSlackSSVM
Pystruct.
Cela s’est produit parce que mes étiquettes de formation étaient des flottants, au lieu d’entiers. Dans mon cas, c’est parce que j’ai initialisé les étiquettes avec np.ones, sans spécifier dtype = np.int8. J'espère que ça aide.
Il arrive assez souvent qu'un tableau d'indexation soit clairement du type integer
de la façon dont il a été créé, mais dans le cas d'une liste vide passée, devient par défaut float
, un cas qui pourrait ne pas être considéré par le programmeur. Par exemple:
>>> np.array(xrange(1))
>>> array([0]) #integer type as expected
>>> np.array(xrange(0))
>>> array([], dtype=float64) #does not generalize to the empty list
Par conséquent, il convient de toujours définir explicitement le dtype
dans le constructeur du tableau.
Parfois, vos données sont en entier et tout est correct, mais c'est ce qui est arrivé car l'une de vos séries de données est un tableau vide. Vous pouvez donc utiliser cette condition:
if len(X_train.todense())> 0: