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]])
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.
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']
L'ajout de .ravel()
à la variable Y/Labels transmise à la formule a également permis de résoudre ce problème dans KNN.
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.
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