Como dimensionar uma matriz de números inteiros assinados para variar de 0 a 1?

Respostas:

25

Isso é chamado de normalização baseada em unidade. Se você tem um vetor , pode obter uma versão normalizada, digamos Z , fazendo:XZ

Z=Xmin(X)max(X)min(X)
stochazesthai
fonte
1
Esta abordagem também é conhecida como a normalização min-max (como estamos a utilizar valores mínimo e máximo)
Shagun Sodhani
Posso usar esse método para normalizar um valor que represente porcentagem e possa ser negativo, mas sempre maior que -2% e menor que 30%? Não será mais difícil para uma rede neural obter a pista do significado do valor se eu normalizá-lo dessa maneira?
Ivan
3

Encontre o maior número positivo e o menor (mais negativo) na matriz. Adicione o valor absoluto do menor número (mais negativo) a todos os valores da matriz. Divida cada resultado pela diferença entre o maior e o menor número.

mcduffee
fonte
@ Jonathan: não importa, desde que ambos os valores sejam da mesma matriz, original ou atualizada. Como o mesmo número é adicionado a cada valor, a diferença entre o mínimo e o máximo permanece a mesma.
RemcoGerlich
1

digamos que você tenha um vetor / 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 );}

A saída no final será v = [0.6, 0, 1]. Explicação:

  1. Pressionando todo o intervalo de valores para começar de 0, para que não tenhamos negativos

  2. Dividindo os valores por (max - min) do intervalo, para que max seja 1

device_exec
fonte
1

Antes de fazer isso, verifique se há discrepâncias. Digamos que 99% dos dados estejam no intervalo (-5, 5), mas um rapaz aceita um valor de 25,0. Sua matriz normalizada se agruparia em torno de (0, 0,3) e isso causaria problemas para a rede neural aprender.

horaceT
fonte