web-dev-qa-db-de.com

Scikit-Learn Cross Val Score: zu viele Indizes für das Array

Ich habe den folgenden Code

 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üfen 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 Tracebacks:

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

Ich erstelle die Daten aus Pandas-Datenrahmen. Ich habe hier gesucht und einige Hinweise auf mögliche Fehler mit dieser Methode gefunden, konnte jedoch nicht herausfinden, wie sie korrigiert werden können

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]])
22
dartdog

Wenn wir in scikit-learn eine Kreuzvalidierung durchführen, benötigt der Prozess eine (R,)-Formbezeichnung anstelle von (R,1). Obwohl sie in gewissem Maße dasselbe sind, unterscheiden sich ihre Indexierungsmechanismen. In Ihrem Fall fügen Sie einfach Folgendes hinzu: 

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

bevor es an die Kreuzvalidierungsfunktion übergeben wird.

36
YE LIANG HARRY

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

labels = train['Y']
13
Bud

Das Hinzufügen von .ravel() zu der in die Formel übergebenen Y/Labels-Variablen half, dieses Problem auch in KNN zu lösen.

2
MSalty

Möglicherweise müssen Sie etwas mit den Abmessungen spielen, 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 ist die Dimension.

0
Gursel Karacor

ziel versuchen:

y=df['Survived'] 

stattdessen habe ich verwendet 

y=df[['Survived']] 

was das Ziel zu einem Datumsrahmen machte, scheint die Serie in Ordnung zu sein

0
Yang Zhao