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


En una nueva instalación de Anaconda bajo 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 (temp a continuación) 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 recibo 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. 

Así que la pregunta es ¿cómo debería reescalar una sola muestra como esta?

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

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

Pero estoy seguro de que hay mejores maneras.

Author: Owen, 2016-01-29

5 answers

Solo escucha lo que la advertencia te está diciendo:

Cambia la forma de tus datos X. cambia la forma (-1, 1) si tus datos tienen una sola característica o X. remodelar (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) 

Para una característica:

temp = temp.reshape(-1,1)
 26
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-30 02:23:56

Bueno, en realidad parece que la advertencia te está diciendo qué hacer.

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

  • Cuando vea 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, usted debe 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)
 27
Author: Ami Tavory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-29 10:32:16

Esto podría ayudar

temp = ([[1,2,3,4,5,6,.....,7]])
 5
Author: Dark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-30 10:12:13

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

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

Entonces 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í.

 0
Author: shan89,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-19 07:35:08

.values.reshape(-1,1) se aceptarán sin alertas/advertencias

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

 0
Author: Analytics,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-25 02:43:24