web-dev-qa-db-fra.com

Scikit-learn cross val score: trop d'indices pour un tableau

J'ai le code suivant

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

Vérification de la forme des tableaux:

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

Et

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

et j'obtiens:

IndexError: too many indices for array

et cette partie pertinente du retraçage:

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

Je crée les données à partir de bases de données Pandas et j’ai cherché ici et ai vu quelques références à des erreurs possibles via cette méthode, mais je ne sais pas comment corriger? À quoi ressemblent les tableaux de données:

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.]])

Étiquettes

Out[22]:
array([[1],
   [1],
   [1],
   ..., 
   [1],
   [1],
   [1]])
22
dartdog

Lorsque nous effectuons une validation croisée dans scikit-learn, le processus nécessite une étiquette de forme (R,) au lieu de (R,1). Bien qu'ils soient identiques dans une certaine mesure, leurs mécanismes d'indexation sont différents. Donc dans votre cas, ajoutez simplement: 

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

avant de le transmettre à la fonction de validation croisée.

36
YE LIANG HARRY

Cela semble réparable si vous spécifiez les étiquettes cibles sous la forme d'une colonne de données unique provenant de Pandas. Si la cible a plusieurs colonnes, j'obtiens une erreur similaire. Par exemple essayez:

labels = train['Y']
13
Bud

L'ajout de .ravel() à la variable Y/Labels transmise à la formule a également permis de résoudre ce problème dans KNN.

2
MSalty

Vous devrez peut-être jouer un peu avec les dimensions, par exemple. 

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

ou

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

n étant la dimension.

0
Gursel Karacor

essayez cible:

y=df['Survived'] 

à la place, j'ai utilisé 

y=df[['Survived']] 

qui a fait de la cible y une date, il semble que la série serait ok

0
Yang Zhao