2013-06-30 8 views
7

błędów w taki sposób:Tablice używane jako wskaźniki powinny mieć całkowitą (lub wartość logiczną) typu

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 

Kody są jak poniżej:

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

ja pomocą scikit-learn opakowania, X-train, y_train są w formacie LIBSVM, X jest funkcją: para wartości, y_train jest docelową/etykietą, X_train jest w formacie macierzy CSR, shrink_threshold nie obsługuje rzadkiej macierzy CSR, więc dodaję .todense() do X_train, to dostałem ten błąd, czy ktoś mógłby mi pomóc to naprawić? Wielkie dzięki!

+0

Jaka jest wartość 'y_train'? – mbatchkarov

+0

Jestem również świadkiem błędu dla tej samej funkcji o nieco innych parametrach. – bearrito

+0

Powinieneś zaakceptować odpowiedź – vumaasha

Odpowiedz

19

Miałem podobny problem, używając Pystruct pystruct.learners.OneSlackSSVM.

Wystąpiło, ponieważ moje etykiety szkoleniowe były pływające zamiast liczb całkowitych. W moim przypadku było tak dlatego, że zainicjowałem etykiety za pomocą np.ones, bez określania dtype = np.int8. Mam nadzieję, że to pomoże.

+2

Man .. bez żadnego użytecznego komunikatu o błędzie. Walczyłem przez ostatnie 3 godziny. Uratowałeś mnie. – vumaasha

+0

Uratowałeś mnie też. Dziękuję Ci. –

Powiązane problemy