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())
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
Séparation des colonnes prédicteurs et cibles en X et y respectivement.
Division des données d'apprentissage (X_train, y_train) et des données de test (X_test, y_test).
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)
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é.
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.