web-dev-qa-db-fra.com

Un vecteur de colonne y a été passé lorsqu'un tableau 1d était attendu

Je dois adapter RandomForestRegressor à partir de sklearn.ensemble.

forest = ensemble.RandomForestRegressor(**RF_tuned_parameters)
model = forest.fit(train_fold, train_y)
yhat = model.predict(test_fold)

Ce code a toujours fonctionné jusqu’à ce que je fasse un prétraitement des données (train_y) . Le message d’erreur indique:

DataConversionWarning: Un vecteur de colonne y a été passé lorsqu'un tableau 1d était attendu. Modifiez la forme de y en (n_samples), par exemple en utilisant ravel ().

model = forest.fit (train_fold, train_y)

Auparavant, train_y était une série, maintenant c'est un tableau numpy (c'est un vecteur colonne). Si j'applique train_y.ravel(), il devient alors un vecteur de ligne et aucun message d'erreur ne s'affiche. L'étape de prédiction prend très longtemps (en réalité, elle ne se termine jamais ...).

Dans la documentation de RandomForestRegressor j'ai trouvé que train_y devrait être défini comme y : array-like, shape = [n_samples] or [n_samples, n_outputs] Avez-vous une idée de la façon de résoudre ce problème?

48
Klausos Klausos

Changer cette ligne: 

model = forest.fit(train_fold, train_y)

à:

model = forest.fit(train_fold, train_y.values.ravel())
90
Linda MacPhee-Cobb

utiliser le code ci-dessous:

model = forest.fit(train_fold, train_y.ravel())

si vous obtenez toujours slap par erreur aussi identique que ci-dessous?

Unknown label type: %r" % y

utilisez ce code:

y = train_y.ravel()
train_y = np.array(y).astype(int)
model = forest.fit(train_fold, train_y)
8
Coral

J'ai eu le même problème. Le problème était que les étiquettes étaient dans un format de colonne alors qu'elles l'attendaient dans une rangée . Use np.ravel()

knn.score(training_set, np.ravel(training_labels))

J'espère que cela résout le problème.

Une autre façon de faire est d’utiliser ravel

model = forest.fit(train_fold, train_y.values.reshape(-1,))
0
sushmit