2013-06-30 4 views
7

Fehler wie diese sind:Arrays als Indizes verwendet wird, muss der ganze Zahl sein (oder boolean) Typ

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 

Codes wie folgt sind:

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

I scikit-learn Paket verwende, X-train, y_train sind im LIBSVM-Format, X ist das Merkmal: Wert-Paar, y_train ist das Ziel/Label, X_train ist im CSR-Format, die shrink_threshold unterstützt CSR-Sparse-Matrix nicht, so dass ichhinzufügenbis X_train, dann habe ich diesen Fehler, könnte mir jemand helfen, das zu beheben? Danke vielmals!

+0

Was ist der Wert von 'y_train'? – mbatchkarov

+0

Ich bin auch Zeuge der Fehler für die gleiche Funktion mit etwas anderen Parametern. – bearrito

+0

Sie sollten die Antwort annehmen – vumaasha

Antwort

19

Ich hatte ein ähnliches Problem mit dem Pystruct pystruct.learners.OneSlackSSVM.

Es kam vor, weil meine Trainingsetiketten Floats statt Ganzzahlen waren. In meinem Fall lag das daran, dass ich die Labels mit np.ones initialisiert habe, ohne dtype = np.int8 anzugeben. Ich hoffe es hilft.

+2

Man .. ohne sinnvolle Fehlermeldung. Ich habe für die letzten 3 Stunden gekämpft. Du hast mich gerettet. – vumaasha

+0

hat mich auch gerettet. Vielen Dank. –

Verwandte Themen