Se pasó un vector de columna y cuando se esperaba una matriz 1d

4 minutos de lectura

avatar de usuario
Klausos Klausos

necesito encajar RandomForestRegressor de sklearn.ensemble.

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

Este código siempre funcionó hasta que hice un preprocesamiento de datos (train_y). El mensaje de error dice:

Advertencia de conversión de datos: se pasó un vector de columna y cuando se esperaba una matriz 1d. Cambie la forma de y a (n_samples,), por ejemplo, usando ravel().

modelo = forest.fit(train_fold, train_y)

Previamente train_y era una serie, ahora es una matriz numpy (es un vector de columna). si aplico train_y.ravel()luego se convierte en un vector de fila y no aparece ningún mensaje de error, a través del paso de predicción lleva mucho tiempo (en realidad, nunca termina…).

en los documentos de RandomForestRegressor encontre eso train_y debe definirse como y : array-like, shape = [n_samples] or [n_samples, n_outputs]
¿Alguna idea de cómo resolver este problema?

  • que es train_fold.shape y train_y.shape?

    – Alejandro

    08/12/2015 a las 21:05

  • @Alexander: tren_pliegue: tupla (749904,24)… tren:y.ravel(): tupla (749904,)

    – Klausos Klausos

    8 dic 2015 a las 21:16


  • Se ve bien. ¿Ha intentado entrenar 100 filas de datos para asegurarse de que funcione correctamente (ya que dijo que nunca terminó)? Además, ¿ha examinado el contenido de su train_y datos para asegurarse de que el preprocesamiento no los haya corrompido?

    – Alejandro

    8 dic 2015 a las 21:22


  • Impresión RF_tuned_parameters para nosotros por favor.

    –Imanol Luengo

    8 dic 2015 a las 21:25

  • @imaluengo: {‘n_estimators’: 40, ‘max_features’: 0.8, ‘n_jobs’: 2, ‘verbose’: True, ‘min_samples_split’: 6, ‘random_state’: 123}

    – Klausos Klausos

    8 dic 2015 a las 21:29

avatar de usuario
Linda MacPhee-Cobb

Cambia esta línea:

model = forest.fit(train_fold, train_y)

a:

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

Explicación:

.values dará los valores en un numpy matriz (forma: (n,1))

.ravel convertirá esa forma de matriz en (n, ) (es decir, la aplanará)

  • Alguien podría explicar lo que realmente cambia.

    – Raúl Bali

    3 de junio de 2017 a las 23:34

  • AttributeError: el objeto ‘numpy.ndarray’ no tiene atributos ‘valores’

    – John Ktejik

    23 de noviembre de 2017 a las 20:05

  • Si tiene un numpy.ndarray, use train_y.ravel() en su lugar.

    – Caridad Leschinski

    3 de diciembre de 2017 a las 19:33

  • @RahulParashar qué ravel() hace es: cuando tienes y.shape == (10, 1)usando y.ravel().shape == (10, ). En palabras… aplana una matriz.

    – Pascal VKooten

    11 de agosto de 2018 a las 14:42

  • ¿Es esto siquiera una advertencia útil?

    – Alex

    8 de febrero de 2020 a las 19:17

avatar de usuario
Simón Leung

También me encontré con esta situación cuando estaba tratando de entrenar a un KNN clasificador pero parece que la advertencia desapareció después de que cambié:
knn.fit(X_train,y_train)

a
knn.fit(X_train, np.ravel(y_train,order="C"))

Delante de esta línea usé import numpy as np.

  • Al usar el .ravel() El enfoque de mi vector de columna era un convertidor a un vector de fila en lugar de una matriz, pero esta solución funcionó para mí.

    – kabdulla

    30 oct 2018 a las 10:45


avatar de usuario
mohammad hassan bigdeli shamlo

Yo tuve el mismo problema. El problema era que las etiquetas estaban en formato de columna mientras que lo esperaba en una fila. usar np.ravel()

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

Espero que esto lo resuelva.

  • Te refieres a np.ravel()?

    – Pramesh Bajracharya

    11 de enero de 2019 a las 5:57

avatar de usuario
Soumyaansh

use el siguiente código:

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

si todavía recibe una bofetada por error tan idéntica como a continuación?

Unknown label type: %r" % y

usa este código:

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

avatar de usuario
Jeyakeethan Geethan

Y = y.values[:,0]

Y - formated_train_y

y - train_y

  • Agregue algunas líneas para explicar su respuesta, solo publicar el código no hace ningún bien a ninguno de los lectores. Gracias.

    – Costa

    6 oct 2021 a las 15:45


avatar de usuario
sushmit

Otra forma de hacer esto es usar ravel

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

  • Agregue algunas líneas para explicar su respuesta, solo publicar el código no hace ningún bien a ninguno de los lectores. Gracias.

    – Costa

    6 oct 2021 a las 15:45


Con eje neuralpuedes resolver esto fácilmente:

p = Pipeline([
   # expected outputs shape: (n, 1)
   OutputTransformerWrapper(NumpyRavel()), 
   # expected outputs shape: (n, )
   RandomForestRegressor(**RF_tuned_parameters)
])

p, outputs = p.fit_transform(data_inputs, expected_outputs)

Neuraxle es un marco similar a sklearn para el ajuste de hiperparámetros y AutoML en proyectos de aprendizaje profundo.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad