Comment normaliser les données entre -1 et 1?

36

J'ai vu la formule de normalisation min-max mais cela normalise les valeurs comprises entre 0 et 1. Comment normaliser mes données entre -1 et 1? J'ai des valeurs négatives et positives dans ma matrice de données.

covfefe
la source
1
Si vous travaillez dans R, voyez ce fil pour quelques options. En particulier, un commentaire sur la réponse acceptée a cette fonction où vous définissez 'newMax' sur 1 et 'newMin' sur -1 et exécutez la fonction sur vos données
mtreg
Vous pouvez trouver des références sur Wikipedia comme suit: en.wikipedia.org/wiki/Normalization_(statistics)
salem
Exemple Javascript, tiré d' ici . fonction convertRange (valeur, r1, r2) {retour (valeur - r1 [0]) * (r2 [1] - r2 [0]) / (r1 [1] - r1 [0]) + r2 [0]; } convertRange (328.17, [300.77, 559.22], [1, 10]); >>> 1.9541497388276272
Giuseppe Canale
1
@covfefe si vous êtes toujours dans le coin, vous voudrez peut-être accepter l'une des réponses
Simone

Réponses:

97

x[0,1]

x=xminxmaxxminx
x[0,1]

Pour normaliser dans vous pouvez utiliser:[-1,1]

X"=2X-minXmaxX-minX-1

En général, vous pouvez toujours obtenir une nouvelle variable dans : [ a , b ]X[une,b]

X=(b-une)X-minXmaxX-minX+une
Simone
la source
15
Honnêtement, je n'ai pas de citations pour cela. C'est juste une transformation linéaire d'une variable aléatoire. Observez l'effet des transformations linéaires sur le support d'une variable aléatoire.
Simone
-1

J'ai testé sur des données générées aléatoirement, et

Xovoust=(b-une)Xjen-minXjenmaxXjen-minXjen+une

ne préserve pas la forme de la distribution. Voudrais vraiment voir la dérivation appropriée de cette fonction en utilisant des fonctions de variables aléatoires.

L’approche qui préservait la forme pour moi utilisait:

Xovoust=Xjen-μjenσjenσovoust+μovoust

σovoust=b-une6

(J'avoue que l'utilisation de 6 est un peu sale ) et

μovoust=b+une2

et

uneb a = - 1 b = 1 et est la plage souhaitée; de sorte que selon la question initiale serait et .bune=-1b=1

Je suis arrivé au résultat de ce raisonnement

Zovoust=Zjen

Xovoust-μovoustσovoust=Xjen-μjenσjen

AL Verminburger
la source
3
Etes-vous sûr que cela garantit que les données transformées resteront dans les limites? Dans R, essayez: set.seed(1); scale(rnorm(1000))*.333. Je reçois un max de 1.230871. Votre méthode semble être juste un ajustement sur la normalisation des données, plutôt que de les normaliser comme demandé. Notez que la question ne demande pas une méthode qui préserve la forme de la distribution (ce qui serait une exigence étrange pour la normalisation).
gung - Rétablir Monica
3
Je ne suis pas sûr de savoir comment la transformation d'origine pourrait ne pas conserver la forme des données. Cela revient à soustraire une constante, puis à la diviser par une constante, ce que fait votre proposition et qui ne modifie pas la forme des données. Votre proposition suppose que toutes les données se situent à moins de trois écarts types de la moyenne, ce qui peut être relativement raisonnable avec de petits échantillons distribués normalement, mais pas avec des échantillons volumineux ou non normaux.
Noah
1
@ Noah Cela ne revient pas à soustraire et à diviser par des constantes, car les valeurs min et max des données sont des variables aléatoires. En effet, pour la plupart des distributions sous-jacentes, elles sont plutôt variables, plus variables que le reste des données, et leur utilisation pour toute forme de normalisation n’est généralement pas une bonne idée. Dans cette réponse, il est difficile de savoir ce signifie a et ou comment ils pourraient être liés aux données. buneb
whuber
2
@whuber true, mais je voulais dire que dans un jeu de données donné (c'est-à-dire traiter les données comme étant fixes), ce sont des constantes, de la même manière que la moyenne et la fonction d'écart type d'échantillon comme constantes lors de la normalisation d'un jeu de données. Mon impression était que OP voulait normaliser un jeu de données, pas une distribution.
Noah
@Noah J'ai eu la même impression, mais je pense que le post actuel peut répondre à une interprétation différente.
whuber