web-dev-qa-db-fra.com

Comment résoudre "IndexError: trop d'index pour tableau"

Mon code ci-dessous me donne l'erreur suivante "IndexError: trop d'index pour tableau". Je suis assez novice en apprentissage automatique, je n'ai donc aucune idée de la façon de résoudre ce problème. Toute aide serait appréciée.

train = pandas.read_csv("D:/...input/train.csv")


xTrain = train.iloc[:,0:54]
yTrain = train.iloc[:,54:]


from sklearn.cross_validation import cross_val_score
clf = LogisticRegression(multi_class='multinomial')
scores = cross_val_score(clf, xTrain, yTrain, cv=10, scoring='accuracy')
print('****Results****')
print(scores.mean())
5
Sujoy De

Le code d'erreur que vous obtenez indique en gros que vous déclarez que le contenu de votre tableau ne correspond pas à celui-ci . Je ne vois pas la déclaration de votre tableau, mais je suppose qu'il s'agit d'une dimension et que le programme est vous opposant à le traiter comme un 2 dimensions. 

Vérifiez simplement que vos déclarations sont correctes et aussi testez le code en imprimant les valeurs après les avoir configurées pour vérifier qu'elles correspondent à ce que vous souhaitez qu'elles soient. 

Il existe déjà quelques questions sur ce sujet, aussi je vais en lier une qui pourrait être utile ici: IndexError: trop d'index. Numpy Array avec 1 rangée et 2 colonnes

2
LJ Codes

Explication pas à pas du code ML avec Pandas Dataframe:

  1. Séparation des colonnes prédicteurs et cibles en X et y respectivement.

  2. Division des données d'apprentissage (X_train, y_train) et des données de test (X_test, y_test).

  3. Calcul de l'ASC croisée (surface sous la courbe). Vous avez une erreur " IndexError: trop d'index pour array " en raison de y_train car il attendait un tableau 1-D mais un tableau 2D récupéré qui est une incompatibilité. Après Remplacement le code 'y_train' avec y_train ['y'] code a fonctionné comme un charme


   # Importing Packages :

   import pandas as pd

   from sklearn.model_selection import cross_val_score

   from sklearn.model_selection import StratifiedShuffleSplit

   # Seperating Predictor and Target Columns into X and y Respectively :
   # df -> Dataframe extracted from CSV File

   data_X = df.drop(['y'], axis=1) 
   data_y = pd.DataFrame(df['y'])

   # Making a Stratified Shuffle Split of Train and Test Data (test_size=0.3 Denotes 30 % Test Data and Remaining 70% Train Data) :

   rs = StratifiedShuffleSplit(n_splits=2, test_size=0.3,random_state=2)       
   rs.get_n_splits(data_X,data_y)

   for train_index, test_index in rs.split(data_X,data_y):

       # Splitting Training and Testing Data based on Index Values :

       X_train,X_test = data_X.iloc[train_index], data_X.iloc[test_index]
       y_train,y_test = data_y.iloc[train_index], data_y.iloc[test_index]

       # Calculating 5-Fold Cross-Validated AUC (cv=5) - Error occurs due to Dimension of **y_train** in this Line :

       classify_cross_val_score = cross_val_score(classify, X_train, y_train, cv=5, scoring='roc_auc').mean()

       print("Classify_Cross_Val_Score ",classify_cross_val_score) # Error at Previous Line.

       # Worked after Replacing 'y_train' with y_train['y'] in above Line 
       # where y is the ONLY Column (or) Series Present in the Pandas Data frame 
       # (i.e) Target variable for Prediction :

       classify_cross_val_score = cross_val_score(classify, X_train, y_train['y'], cv=5, scoring='roc_auc').mean()

       print("Classify_Cross_Val_Score ",classify_cross_val_score)

       print(y_train.shape)

       print(y_train['y'].shape)

Sortie:

    Classify_Cross_Val_Score  0.7021433588790991
    (31647, 1) # 2-D
    (31647,)   # 1-D

Remarque: de sklearn.model_selection import cross_val_score .. Cross_val_score a été importé De sklearn.model_selection et NOT de sklearn.cross_validation qui est désapprouvé.

5
Vetrivel PS

Vous obtenez cette erreur parce que vous créez le tableau cible 'y' 2-D qui doit en réalité être 1-D pour passer en validation croisée.

Ces deux cas sont différents:

1. y=numpy.zeros(shape=(len(list),1))
2. y=numpy.zeros(shape=(len(list))) 

Si vous déclarez y comme dans le cas 1, alors y devient 2-D. Mais vous aviez besoin d'un tableau 1-D, par conséquent, utilisez le cas 2.

2
TechBomb