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 unnp.array
con dos dimensionescuando vea
y
, debe ser unnp.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