Cómo normalizar los datos de prueba y entrenamiento cuando tienen un número diferente de filas.
Tengo un dataframe d
y una de las columnas es price
(Numérico) con 109248 filas. Dividí los datos en dos partes d_train
y d_test
. d_train
tiene 73196 valores y d_test
tiene 36052 valores. Ahora, para normalizar d_train['price']
y d_test['price']
, hice algo como esto…
price_scalar = Normalizer()
X_train_price = price_scalar.fit_transform(d_train['price'].values.reshape(1, -1)
X_test_price = price_scalar.transform(d_test['price'].values.reshape(1, -1))
Ahora tengo este problema
ValueError Traceback (most recent call last)
<ipython-input-20-ba623ca7bafa> in <module>()
3 X_train_price = price_scalar.fit_transform(X_train['price'].values.reshape(1, -1))
----> 4 X_test_price = price_scalar.transform(X_test['price'].values.reshape(1, -1))
/usr/local/lib/python3.7/dist-packages/sklearn/base.py in _check_n_features(self, X, reset)
394 if n_features != self.n_features_in_:
395 raise ValueError(
397 f"espera {self.n_features_in_} características como entrada."
398 )
ValueError: X tiene 36052 características, pero Normalizer espera 73196 características como entrada.
Haciendo el cambio: reshape(-1,1)
en lugar de reshape(1,-1)
se ejecuta correctamente, pero establece todos los valores de la columna price
en 1.
davy.ai
El problema que enfrenta el usuario se debe a la forma incorrecta de la entrada pasada a los métodos
fit_transform
ytransform
de la claseNormalizer
.El fragmento de código
X_train_price = price_scalar.fit_transform(d_train['price'].values.reshape(1, -1)
intenta redimensionar la columnaprice
ded_train
en una matriz de forma(1, -1)
, lo que significa un vector de fila con un número desconocido de columnas. De manera similar,X_test_price = price_scalar.transform(d_test['price'].values.reshape(1, -1))
intenta redimensionar la columnaprice
ded_test
a la misma forma.Sin embargo, la forma correcta para los datos de entrada a
Normalizer
es(n_samples, n_features)
, donden_samples
es el número de muestras yn_features
es el número de características en los datos. En este caso,n_samples
debería ser el número de filas en la columnaprice
yn_features
debería ser 1, ya que solo hay 1 característica en la columna.Para lograr esta forma, se debe utilizar
reshape(-1, 1)
en lugar dereshape(1, -1)
de la siguiente manera:Esto redimensionará la columna
price
en un vector columna de forma(n_samples, 1)
, que es la forma de entrada correcta paraNormalizer
.Sin embargo, el usuario debe tener en cuenta que usar
Normalizer
de esta manera puede no ser apropiado para sus datos, ya que normaliza cada muestra (es decir, fila) de manera independiente para que tenga una norma unitaria. Esto puede no ser el método de normalización deseado para la columnaprice
, que puede beneficiarse de otras técnicas de normalización como la escala min-max, la normalización z-score, etc. El usuario debe elegir la técnica de normalización apropiada para su caso específico basado en la distribución de los datos y los requisitos del algoritmo de aprendizaje automático que se está utilizando.