¿Cómo escalar una matriz de enteros con signo para variar de 0 a 1?

Respuestas:

25

Esto se llama normalización basada en la unidad. Si tiene un vector , puede obtener una versión normalizada del mismo, digamos , haciendo:ZXZ

Z=Xmin(X)max(X)min(X)
Stochazesthai
fuente
1
Este enfoque también se conoce como normalización min-max (ya que estamos usando valores min y max)
Shagun Sodhani
¿Está bien usar este método para normalizar un valor que representa un porcentaje y puede ser negativo pero siempre mayor que -2% y menor que 30%? ¿No será más difícil para una red neuronal obtener la pista del significado del valor si lo normalizo de esta manera?
Ivan
3

Encuentre el número positivo más grande y el número más pequeño (más negativo) en la matriz. Agregue el valor absoluto del número más pequeño (más negativo) a cada valor en la matriz. Divide cada resultado por la diferencia entre el número más grande y el más pequeño.

mcduffee
fuente
@ Jonathan: no importa siempre que ambos valores sean de la misma matriz, original o actualizada. Como se agrega el mismo número a cada valor, la diferencia entre el mínimo y el máximo se mantiene igual.
RemcoGerlich
1

digamos que tiene un vector / matriz de valores v = [1, -2, 3]

minV = Math.min.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] -= minV;}
maxV = Math.max.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] /= ( maxV - minV );}

La salida al final será v = [0.6, 0, 1]. Explicación:

  1. Empujar todo el rango de valores para comenzar desde 0, para que no tengamos negativos

  2. Dividiendo los valores por (max - min) de rango, de modo que max será 1

device_exec
fuente
1

Antes de hacer eso, es posible que desee verificar los valores atípicos. Digamos que el 99% de los datos se encuentran en el rango (-5, 5), pero un pequeño individuo toma un valor de 25.0. Su matriz normalizada se agruparía alrededor (0, 0.3), y eso causaría problemas para que la red neuronal aprenda.

horaceT
fuente