Come normalizzare i dati tra -1 e 1?


36

Ho visto la formula di normalizzazione min-max ma che normalizza i valori tra 0 e 1. Come potrei normalizzare i miei dati tra -1 e 1? Ho valori negativi e positivi nella mia matrice di dati.


1
Se lavori in R, vedi questa discussione per alcune opzioni. In particolare, un commento sulla risposta accettata ha questa funzione in cui si imposta 'newMax' su 1 e 'newMin' su -1 ed si esegue la funzione sui propri dati
mtreg,

Puoi trovare riferimenti a Wikipedia come segue: en.wikipedia.org/wiki/Normalization_(statistics)
salem,

Esempio Javascript, preso da qui . funzione convertRange (value, r1, r2) {return (value - 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 se sei ancora in giro potresti voler accettare una delle risposte
Simone

Risposte:


97

x[0,1]

x=xminxmaxxminx
x[0,1]

Per normalizzare in puoi usare:[1,1]

x=2xminxmaxxminx1

In generale, puoi sempre ottenere una nuova variabile x in [a,b] :

x=(ba)xminxmaxxminx+a

15
Onestamente non ho citazioni per questo. È solo una trasformazione lineare di una variabile casuale. Dai un'occhiata all'effetto delle trasformazioni lineari sul supporto di una variabile casuale.
Simone,

-1

Ho testato su dati generati casualmente e

Xout=(ba)XinminXinmaxXinminXin+a

non conserva la forma della distribuzione. Mi piacerebbe davvero vedere la corretta derivazione di questo usando le funzioni di variabili casuali.

L'approccio che ha preservato la forma per me è stato l'utilizzo di:

Xout=Xinμinσinσout+μout

dove

σout=ba6

(Ammetto che usare 6 è un po ' sporco ) e

μout=b+a2

e

a e è l'intervallo desiderato; così come per la domanda originale sarebbe e .ba=1b=1

Sono arrivato al risultato da questo ragionamento

Zout=Zin

Xoutμoutσout=Xinμinσin


3
Sei sicuro che ciò garantisca che i dati trasformati rimarranno entro i limiti? In R, provare: set.seed(1); scale(rnorm(1000))*.333. Ottengo un massimo di 1.230871. Il tuo metodo sembra essere solo una modifica alla standardizzazione dei dati, piuttosto che normalizzarli come richiesto. Si noti che la domanda non richiede un metodo che preservi la forma della distribuzione (che sarebbe uno strano requisito per la normalizzazione).
gung - Ripristina Monica

3
Non sono sicuro di come la trasformazione originale potrebbe non riuscire a preservare la forma dei dati. Equivale a sottrarre una costante e quindi a dividerla per una costante, che è ciò che fa la tua proposta e che non cambia la forma dei dati. La tua proposta presuppone che tutti i dati rientrino in tre deviazioni standard della media, il che può essere in qualche modo ragionevole con campioni piccoli, distribuiti approssimativamente normalmente, ma non con campioni grandi o non normali.
Noah,

1
@Noah Non equivale a sottrarre e dividere per costanti, perché il minimo e il massimo dei dati sono variabili casuali. In effetti, per la maggior parte delle distribuzioni sottostanti sono piuttosto variabili - più variabili rispetto al resto dei dati - per cui usarle per qualsiasi forma di standardizzazione di solito non è una buona idea. In questa risposta non è chiaro ciò che e media o come potrebbero essere correlati ai dati. bab
whuber

2
@whuber true, ma intendevo che in un determinato set di dati (ovvero, trattando i dati come fissi), sono costanti, allo stesso modo la media del campione e la funzione di deviazione standard del campione come costanti durante la standardizzazione di un set di dati. La mia impressione era che OP volesse normalizzare un set di dati, non una distribuzione.
Noah,

@Noah ho avuto la stessa impressione, ma credo che il presente post possa rispondere a un'interpretazione diversa.
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.