Es una práctica común normalizar los datos para entrenar una red neuronal a una media cero y una desviación estándar de «unidad» para reducir los efectos de gradiente de explosión y desaparición, etc.
¿Qué significa «unidad» estándar aquí? Un ejemplo sería realmente útil.
Comentarios
- Significa igual a 1. Para obtener que divida los valores por la desviación estándar de los datos originales . (La media cero proviene de restar la media).
Respuesta
Significa que está convirtiendo sus características de datos desde sus unidades originales (millas, dólares, tiempo transcurrido, …) a unidades de desviación estándar. Como lo solicitó, se muestra un ejemplo muy simple:
Suponga que desea predecir los precios de la vivienda a partir de dos características: número de dormitorios (unidad entera) y tamaño (en unidades de metros cuadrados), como los datos ficticios a continuación:
import numpy as np X = np.array([[1, 65],[3, 130],[2, 80],[2, 70],[1, 50]])
Observe que cada característica tiene una media y una desviación estándar muy diferentes
print("mean={}, std{}".format(X.mean(axis=0), X.std(axis=0))
Resultados: mean=[ 1.83333333, 78.33333333]), std=[ 0.68718427, 24.94438258])
Observó que el tamaño de la función tiene media y estándar más de 30 veces mayor que el número de dormitorios, esto produce distorsiones en algunos algoritmos de cálculo (como redes neuronales, svm , knn, etc.) donde algunas características con valores más grandes dominan completamente las otras con valores más pequeños. Para resolver eso, una práctica común y muy efectiva es transformar los datos a unidades de desviación estándar con media cero, es decir, resta la media y divide por la desviación estándar, como a continuación:
X_t = (X - X.mean(axis=0))/X.std(axis=0)
La variable X_t
(X transformada) contiene sus características en desviaciones estándar unitarias con media cero, imprimiendo X_t
obtienes:
array([[-1.21267813, -0.53452248], [ 1.69774938, 2.07127462], [ 0.24253563, 0.06681531], [ 0.24253563, -0.33407655], [-1.21267813, -1.13586028], [ 0.24253563, -0.13363062]])
Mira cómo los números en ambas características tienen la misma magnitud. Si imprime X_t
mean y std ahora obtiene
mean=[ 1.11022302e-16 2.08166817e-16], std=[ 1. 1.]
como se esperaba.