73 votos

Normalización y estandarización de datos en redes neuronales

Estoy intentando predecir el resultado de un sistema complejo mediante redes neuronales (RNA). Los valores del resultado (dependiente) oscilan entre 0 y 10.000. Las diferentes variables de entrada tienen diferentes rangos. Todas las variables tienen distribuciones aproximadamente normales.

Considero diferentes opciones para escalar los datos antes del entrenamiento. Una opción es escalar las variables de entrada (independientes) y de salida (dependientes) a [0, 1] mediante cálculo de la función de distribución acumulativa utilizando los valores de la media y la desviación estándar de cada variable, independientemente. El problema de este método es que si utilizo la función de activación sigmoidea en la salida, es muy probable que pase por alto los datos extremos, especialmente los que no se ven en el conjunto de entrenamiento

Otra opción es utilizar una puntuación z. En ese caso no tengo el problema de los datos extremos; sin embargo, estoy limitado a una función de activación lineal en la salida.

¿Cuáles son otras técnicas de normalización aceptadas que se utilizan con las RNA? He intentado buscar reseñas sobre este tema, pero no he encontrado nada útil.

53voto

karatchov Puntos 230

Un enfoque estándar es escalar las entradas para que tengan una media de 0 y una varianza de 1. También la descorrelación lineal/blanqueo/pca ayuda mucho.

Si te interesan los trucos del oficio, te recomiendo El artículo de LeCun sobre la eficacia de la retropropulsión.

32voto

Ben Wallis Puntos 399

1- La normalización Min-max conserva la distribución original de las puntuaciones excepto un factor de escala y transforma todas las puntuaciones en un rango común [0, 1]. Sin embargo, este método no es robusto (es decir, el método es muy sensible a los valores atípicos.

2- Estandarización (normalización Z-score) La técnica más utilizada, que se calcula utilizando la media aritmética y la desviación estándar de los datos dados. Sin embargo, tanto la media como la desviación estándar son sensibles a los valores atípicos, y esta técnica no garantiza un rango numérico común para las puntuaciones normalizadas. Además, si las puntuaciones de entrada no tienen una distribución gaussiana, esta técnica no conserva la distribución de entrada en la salida.

3- Mediana y MAD: La mediana y la desviación absoluta de la mediana (MAD) son insensibles a los valores atípicos y a los puntos de las colas extremas de la distribución, por lo que son robustas. Sin embargo, esta técnica no conserva la distribución de entrada y no transforma las puntuaciones en un rango numérico común.

4- Estimadores de tanh: Los estimadores de tanh introducidos por Hampel et al. son robustos y muy eficientes. La normalización viene dada por

tanh estimators donde μGH y σGH son las estimaciones de la media y la desviación estándar, respectivamente, de la distribución de la puntuación genuina según los estimadores de Hampel.

Por lo tanto, recomiendo los tanh-estimadores.

referencia https://www.cs.ccu.edu.tw/~wylin/BA/Fusion_of_Biometrics_II.ppt

9voto

darken Puntos 91

He dado una respuesta similar aquí Al realizar una regresión múltiple, ¿cuándo hay que centrar las variables predictoras y cuándo hay que estandarizarlas? pero pensé que era un contexto lo suficientemente diferente como para que una respuesta pudiera ir aquí.

Hay un gran recurso en usenet http://www.faqs.org/faqs/ai-faq/neural-nets/part2/section-16.html

En él se exponen en términos sencillos algunos de los problemas y consideraciones que hay que tener en cuenta cuando se quiere normalizar/estandarizar/reescalar los datos. Como trata el tema desde una perspectiva de aprendizaje automático, y como tu pregunta es de ML, podría tener cierta relevancia.

5voto

Podrías hacer

  • normalización min-max (normalizar las entradas/objetivos para que caigan en el rango [-1,1]), o
  • normalización de la desviación media-estándar (normalizar las entradas/objetivos para que tengan una media cero y una varianza/desviación estándar unitaria)

2voto

margold Puntos 6

Si trabaja en python , sklearn tiene un método para hacerlo utilizando diferentes técnicas en su preprocessing (además de una ingeniosa función de canalización, con un ejemplo en sus documentos):

import sklearn

# Normalize X, shape (n_samples, n_features)
X_norm = sklearn.preprocessing.normalize(X)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X