Comment mettre à l'échelle un tableau d'entiers signés de 0 à 1?

15

J'utilise Brain pour former un réseau neuronal sur un ensemble de fonctionnalités qui comprend des valeurs positives et négatives. Mais Brain nécessite des valeurs d'entrée comprises entre 0 et 1. Quelle est la meilleure façon de normaliser mes données?

Jonathan Shobrook
la source

Réponses:

25

C'est ce qu'on appelle la normalisation basée sur l'unité. Si vous avez un vecteur X , vous pouvez en obtenir une version normalisée, disons Z , en faisant:

Z=Xmin(X)max(X)min(X)
stochazesthai
la source
1
Cette approche est également connue sous le nom de normalisation min-max (car nous utilisons des valeurs min et max)
Shagun Sodhani
Est-il correct d'utiliser cette méthode pour normaliser une valeur qui représente un pourcentage et peut être négative mais toujours supérieure à -2% et inférieure à 30%? Ne sera-t-il pas plus difficile pour un réseau de neurones d'obtenir la signification de la valeur si je le normalise de cette façon?
Ivan
3

Trouvez le plus grand nombre positif et le plus petit nombre (le plus négatif) dans le tableau. Ajoutez la valeur absolue du plus petit nombre (le plus négatif) à chaque valeur du tableau. Divisez chaque résultat par la différence entre le plus grand et le plus petit nombre.

mcduffee
la source
@Jonathan: cela n'a pas d'importance tant que les deux valeurs proviennent du même tableau, d'origine ou mises à jour. Étant donné que le même nombre est ajouté à chaque valeur, la différence entre le minimum et le maximum reste la même.
RemcoGerlich
1

dites que vous avez un vecteur / tableau de valeurs 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 sortie à la fin sera v = [0.6, 0, 1]. Explication:

  1. Pousser toute la plage de valeurs pour commencer à partir de 0, afin que nous n'ayons aucun négatif

  2. Diviser les valeurs par (max - min) de plage, de sorte que max sera 1

device_exec
la source
1

Avant de faire cela, vous voudrez peut-être vérifier les valeurs aberrantes. Supposons que 99% des données se situent dans la plage (-5, 5), mais un petit gars prend une valeur de 25,0. Votre réseau normalisé se regrouperait autour de (0, 0,3), et cela poserait problème pour le réseau neuronal à apprendre.

horaceT
la source