Come ridimensionare un array di numeri interi con segno che vanno da 0 a 1?


Risposte:


25

Questo si chiama normalizzazione basata sull'unità. Se hai un vettore , puoi ottenere una versione normalizzata di esso, diciamo Z , facendo:XZ

Z=X-min(X)max(X)-min(X)

1
Questo approccio è anche noto come normalizzazione min-max (poiché stiamo usando i valori min e max)
Shagun Sodhani,

Va bene usare questo metodo per normalizzare un valore che rappresenta la percentuale e può essere negativo ma sempre superiore al -2% e inferiore al 30%? Non sarà più difficile per una rete neurale avere la chiave del valore che significa se lo normalizzo in questo modo?
Ivan,

3

Trova il numero positivo più grande e il numero più piccolo (il più negativo) nella matrice. Aggiungi il valore assoluto del numero più piccolo (il più negativo) a ogni valore dell'array. Dividi ogni risultato per la differenza tra il numero più grande e il numero più piccolo.


@Jonathan: non importa finché entrambi i valori provengono dallo stesso array, originale o aggiornato. Poiché lo stesso numero viene aggiunto a ogni valore, la differenza tra il minimo e il massimo rimane invariata.
RemcoGerlich,

1

supponiamo che tu abbia un vettore / array di valori 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 );}

L'output alla fine sarà v = [0.6, 0, 1]. Spiegazione:

  1. Spingendo l'intero intervallo di valori a partire da 0, in modo da non avere negativi

  2. Dividere i valori per (max - min) dell'intervallo, in modo che max sia 1


1

Prima di farlo, potresti voler controllare i valori anomali. Supponiamo che il 99% dei dati sia compreso nell'intervallo (-5, 5), ma un ragazzino assume un valore di 25,0. L'array normalizzato si raggrupperebbe intorno (0, 0,3) e ciò causerebbe l'apprendimento della rete neurale.

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.