¿Deberíamos aplicar también la normalización a los datos de prueba?

17

Estoy haciendo un proyecto sobre el problema de identificación del autor. Había aplicado la normalización tf-idf para entrenar datos y luego entrené un svm en esos datos.

Ahora, al usar el clasificador, también debería normalizar los datos de prueba. Creo que el objetivo básico de la normalización es hacer que el aprendizaje aprenda más a las características más importantes mientras se aprende. Entonces, una vez que se ha entrenado, ya sabe qué características son importantes y cuáles no. Entonces, ¿hay alguna necesidad de aplicar la normalización a los datos de prueba también?

Soy nuevo en este campo. ¿Entonces ignore si la pregunta parece tonta?

Kishan Kumar
fuente
44
Los datos de su prueba deben estar en la misma escala que sus datos de entrenamiento.
Jon

Respuestas:

36

Sí, debe aplicar la normalización a los datos de prueba, si su algoritmo funciona o necesita datos de entrenamiento normalizados *.

Esto se debe a que su modelo funciona en la representación dada por sus vectores de entrada. La escala de esos números es parte de la representación. Esto es un poco como convertir entre pies y metros. . . un modelo o fórmula funcionaría con un solo tipo de unidad normalmente.

No solo necesita normalización, sino que debe aplicar exactamente la misma escala que para sus datos de entrenamiento. Eso significa almacenar la escala y el desplazamiento utilizados con sus datos de entrenamiento, y usarlos nuevamente. Un error común para principiantes es normalizar por separado su tren y los datos de prueba.

En Python y SKLearn, puede normalizar sus valores de entrada / X utilizando el Escalador estándar de esta manera:

scaler = StandardScaler()
train_X = scaler.fit_transform( train_X )
test_X = scaler.transform( test_X )

Observe cómo la conversión del train_Xuso de una función que se ajusta (descifra los parámetros) luego se normaliza. Mientras que la test_Xconversión simplemente se transforma, usando los mismos parámetros que aprendió de los datos del tren.

La normalización tf-idf que está aplicando debería funcionar de manera similar, ya que aprende algunos parámetros del conjunto de datos en su conjunto (frecuencia de palabras en todos los documentos), así como también usa las proporciones encontradas en cada documento.


* Algunos algoritmos (como los basados ​​en árboles de decisión) no necesitan entradas normalizadas y pueden hacer frente a características que tienen diferentes escalas inherentes.

Neil Slater
fuente
+1 para explicar que los parámetros de normalización para la prueba deben ser los mismos que los determinados por el entrenamiento. Tengo entendido que esta lógica se extiende a cualquier conjunto de validación también.
Greenstick
@Greenstick: Sí, por supuesto, se extiende al tratamiento de todos los datos introducidos en el modelo. Incluyendo nuevos datos si se utilizará un modelo para inferencia en la producción. Sin embargo, creo que la respuesta es lo suficientemente larga sin cubrir todo eso, y el punto en el que divide los datos de validación varía mucho (muchos modelos tienen esto incorporado en el paso de entrenamiento), por lo que no se puede mostrar el ejemplo de código.
Neil Slater
2
¿Debería escalar (fit_transform) los datos de prueba CON los datos de entrenamiento? ¿O lo hace por separado usando la misma escala (scaler.transform)?
Bob Ebert
2
@BobEbert: Puedes hacer cualquiera de los dos. Técnicamente, puede estar filtrando una pequeña cantidad de información de la prueba al entrenamiento, si ajusta un escalador al conjunto de datos combinado, por lo que la versión "oficial" podría ser ajustar el escalador solo a los datos de entrenamiento y aplicarlo a todos los demás conjuntos de datos a partir de entonces. Sin embargo, esta filtración es muy pequeña y nunca he visto que cause un problema en la práctica si ajusta el escalador a todos los datos que tiene.
Neil Slater
Gracias por confirmar mi suposición de que necesito usar la escala derivada del conjunto de entrenamiento para los datos de prueba. Pero, ¿podría proporcionar un enlace con la explicación detrás de esto? EDITAR: no importa, las explicaciones están aquí: datascience.stackexchange.com/questions/58597/…
crazysantaclaus
6

Definitivamente deberías normalizar tus datos. Normaliza los datos para los siguientes objetivos:

  • Por tener diferentes características en la misma escala, que es para acelerar el proceso de aprendizaje.

  • Para cuidar diferentes características de manera justa sin importar la escala.

Después del entrenamiento, su algoritmo de aprendizaje ha aprendido a manejar los datos en forma escalada, por lo que debe normalizar sus datos de prueba con los parámetros de normalización utilizados para los datos de entrenamiento.

Medios de comunicación
fuente