2015-08-13 3 views
17

Ich habe den folgenden CodeScikit-Learn Quer val Punktzahl: zu viele Indizes für Array

from sklearn.ensemble import ExtraTreesClassifier 
from sklearn.cross_validation import cross_val_score 
#split the dataset for train and test 
combnum['is_train'] = np.random.uniform(0, 1, len(combnum)) <= .75 
train, test = combnum[combnum['is_train']==True], combnum[combnum['is_train']==False] 

et = ExtraTreesClassifier(n_estimators=200, max_depth=None, min_samples_split=10, random_state=0) 
min_samples_split=10, random_state=0 ) 

labels = train[list(label_columns)].values 
tlabels = test[list(label_columns)].values 

features = train[list(columns)].values 
tfeatures = test[list(columns)].values 

et_score = cross_val_score(et, features, labels, n_jobs=-1) 
print("{0} -> ET: {1})".format(label_columns, et_score)) 

Überprüfung der Form der Arrays:

features.shape 
Out[19]:(43069, 34) 

Und

labels.shape 
Out[20]:(43069, 1) 

und Ich bekomme:

IndexError: too many indices for array 

und dieser relevante Teil des Zurückverfolgungs:

---> 22 et_score = cross_val_score(et, features, labels, n_jobs=-1) 

ich die Daten von Pandas Datenrahmen zu schaffen und ich suchte hier und sah einen Hinweis auf mögliche Fehler über diese Methode kann aber nicht herausfinden, wie zu korrigieren ? Was die Datenfelder wie folgt aussehen: Funktionen

Out[21]: 
array([[ 0., 1., 1., ..., 0., 0., 1.], 
    [ 0., 1., 1., ..., 0., 0., 1.], 
    [ 1., 1., 1., ..., 0., 0., 1.], 
    ..., 
    [ 0., 0., 1., ..., 0., 0., 1.], 
    [ 0., 0., 1., ..., 0., 0., 1.], 
    [ 0., 0., 1., ..., 0., 0., 1.]]) 

Etiketten

Out[22]: 
array([[1], 
    [1], 
    [1], 
    ..., 
    [1], 
    [1], 
    [1]]) 
+5

Bitte buchen Sie die vollständige Traceback. In welcher Version von scikit-learn bist du? Und können Sie versuchen, stattdessen '' labels.ravel() '' zu übergeben? –

+1

labels.ravel() hat es geschafft! War gerade das Lesen eines anderen Fehlers, der darauf hindeutet, dass mit anderen Code, ich bin auf Scikit learn 17 dev0 – dartdog

+0

@AndreasMueller Vielen Dank für die schnelle Antwort! Könnte ein paar anderen helfen, wenn Sie eine Antwort geben können .. – dartdog

Antwort

25

Wenn wir Kreuzvalidierung in tun Scikit-Learn, erfordert der Prozess ein (R,) Form Etikett statt (R,1). Obwohl sie bis zu einem gewissen Grad dasselbe sind, unterscheiden sich ihre Indexierungsmechanismen. Fügen Sie also einfach in Ihrem Fall hinzu:

c, r = labels.shape 
labels = labels.reshape(c,) 

, bevor Sie es an die Kreuzvalidierung übergeben.

13

Es fixierbar zu sein scheint, wenn Sie die Ziel Etiketten als eine einzelne Datenspalte von Pandas angeben. Wenn das Ziel mehrere Spalten hat, erhalte ich einen ähnlichen Fehler. Zum Beispiel versuchen:

labels = train['Y'] 
+1

Diese Antwort hat mir geholfen, das Problem zu lösen. Vielen Dank! –

+0

Befestigung auch meine. Vielen Dank! – Kyle

+0

Diese Antwort war einfacher und direkter. Vielen Dank. –

2

Das Hinzufügen von .ravel() zu der Variablen Y/Labels, die in die Formel übernommen wurde, half bei der Lösung dieses Problems innerhalb von KNN.

0

try Ziel:

y=df['Survived'] 

stattdessen verwendet i

y=df[['Survived']] 

die das Ziel ya dateframe gemacht, so scheint es, Serie würde

0

Sie in Ordnung sein könnte mit den Abmessungen spielen müssen ein bisschen, z

et_score = cross_val_score(et, features, labels, n_jobs=-1)[:,n] 

oder

et_score = cross_val_score(et, features, labels, n_jobs=-1)[n,:] 

n die Dimension ist.

Verwandte Themen