StandardScaler antes y después de dividir datos


20

Cuando leía sobre el uso StandardScaler, la mayoría de las recomendaciones decían que debería usar StandardScaler antes de dividir los datos en tren / prueba, pero cuando estaba revisando algunos de los códigos publicados en línea (usando sklearn) había dos usos principales.

1- Uso StandardScalerde todos los datos. P.ej

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_fit = sc.fit(X)
X_std = X_fit.transform(X)

O

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit(X)
X = sc.transform(X)

O simplemente

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_std = sc.fit_transform(X)

2- Uso StandardScaleren datos divididos.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

Me gustaría estandarizar mis datos, ¡pero estoy confundido sobre qué método es el mejor!

Respuestas:


25

Para evitar que se filtre información sobre la distribución del conjunto de prueba en su modelo, debe ir a la opción # 2 y ajustar el escalador solo en sus datos de entrenamiento, luego estandarizar tanto el entrenamiento como los conjuntos de prueba con ese escalador. Al ajustar el escalador en el conjunto de datos completo antes de dividirlo (opción n. ° 1), la información sobre el conjunto de prueba se utiliza para transformar el conjunto de entrenamiento, que a su vez se transmite en sentido descendente.

Como ejemplo, conocer la distribución de todo el conjunto de datos podría influir en cómo detecta y procesa los valores atípicos, así como en cómo parametriza su modelo. Aunque los datos en sí no están expuestos, la información sobre la distribución de los datos sí lo está. Como resultado, el rendimiento de su conjunto de pruebas no es una estimación real del rendimiento en datos no vistos. Alguna discusión adicional que pueda encontrar útil está en Cross Validated .


¿Se aplicaría lo mismo a un conjunto de validación? En otras palabras, si divido mi conjunto de entrenamiento en conjuntos de entrenamiento y validación, ¿aprendo el ajuste solo en el tren y luego aplico a los conjuntos de validación y prueba más adelante? o aprendo el ajuste en todo el conjunto de datos que comprende los ejemplos de validación y capacitación y solo me preocupo por aplicarlo al conjunto de prueba más adelante.
Phil Glau

hola - eso es correcto, solo encaja en el tren - no validación o prueba
redhqs

0

¿Qué tal lo siguiente:

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

X_train = sc.fit_transform(X_train)

X_test = sc.fit_transform (X_test)

Porque si X_test = sc.transform(X_test)devuelve el error X_testaún no está instalado. ¿O me perdí algo aquí?


2
Simplemente elimine el ajuste del X_test
tsumaranaina

0

No debería estar haciendo fit_transform (X_test) en los datos de prueba.
El ajuste ya ocurrió arriba.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

Lo sentimos, esto fue como una respuesta a lo que está debajo :)
starsini
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.