sklearn preprocessing onehotencoder labelencoder classification_report python scikit-learn deprecation-warning

python - preprocessing - sklearn metrics



Preprocesamiento en scikit learn-muestra única-Advertencia de depreciación (5)

En una instalación nueva de Anaconda en Ubuntu ... Estoy preprocesando mis datos de varias maneras antes de una tarea de clasificación usando Scikit-Learn.

from sklearn import preprocessing scaler = preprocessing.MinMaxScaler().fit(train) train = scaler.transform(train) test = scaler.transform(test)

Todo esto funciona bien, pero si tengo una nueva muestra (temperatura más abajo) que quiero clasificar (y, por lo tanto, quiero preprocesar de la misma manera, entonces obtengo

temp = [1,2,3,4,5,5,6,....................,7] temp = scaler.transform(temp)

Entonces me sale una advertencia de desaprobación ...

DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.

Entonces, la pregunta es ¿cómo debería volver a escalar una sola muestra como esta?

Supongo que una alternativa (no muy buena) sería ...

temp = [temp, temp] temp = scaler.transform(temp) temp = temp[0]

Pero estoy seguro de que hay mejores maneras.


Bueno, en realidad parece que la advertencia te dice qué hacer.

Como parte de las interfaces uniformes de las etapas sklearn.pipeline , como regla general:

  • cuando ve X , debe ser un np.array con dos dimensiones

  • cuando vea y , debe ser un np.array con una sola dimensión.

Aquí, por lo tanto, debes considerar lo siguiente:

temp = [1,2,3,4,5,5,6,....................,7] # This makes it into a 2d array temp = np.array(temp).reshape((len(temp), 1)) temp = scaler.transform(temp)


Esto podría ayudar

temp = ([[1,2,3,4,5,6,.....,7]])


Me enfrenté al mismo problema y obtuve la misma advertencia de desaprobación. Estaba usando una matriz numpy de [23, 276] cuando recibí el mensaje. Intenté cambiarlo según la advertencia y terminé en ninguna parte. Luego selecciono cada fila de la matriz numpy (ya que estaba iterando sobre ella de todos modos) y la he asignado a una variable de lista. Funcionó entonces sin ninguna advertencia.

array = [] array.append(temp[0])

Luego puede usar el objeto python list (aquí ''array'') como entrada para las funciones sk-learn. No es la solución más eficiente, pero funcionó para mí.


Solo escucha lo que te dice la advertencia:

Cambie la forma de sus datos, ya sea X.reshape (-1, 1) si sus datos tienen una sola característica o X.reshape (1, -1) si contiene una sola muestra.

Para su tipo de ejemplo (si tiene más de una característica):

temp = temp.reshape(1,-1)

Por una característica:

temp = temp.reshape(-1,1)


.values.reshape(-1,1) será aceptado sin alertas / advertencias

.reshape(-1,1) será aceptado, pero con guerra de desaprobación