È pratica comune normalizzare i dati per laddestramento di una rete neurale alla media zero e alla deviazione standard “unitaria” per ridurre gli effetti del gradiente di esplosione e di fuga, ecc. / p>
Cosa significa “unit” std qui? Un esempio sarebbe davvero utile.
Commenti
- Significa uguale a 1. Per ottenerlo, dividi i valori per la deviazione standard dei dati originali . (La media zero deriva dalla sottrazione della media.)
Risposta
Significa che stai convertendo le caratteristiche dei dati dalle sue unità originali (miglia, dollari, tempo trascorso, …) alle unità di deviazione standard. Come richiesto, segue un esempio molto semplice:
Supponi di voler prevedere i prezzi delle case da due caratteristiche: numero di camere da letto (unità intera) e dimensione (in metri quadrati), come i dati fittizi qui sotto:
import numpy as np X = np.array([[1, 65],[3, 130],[2, 80],[2, 70],[1, 50]])
Nota che ogni caratteristica ha media e deviazione standard molto diverse
print("mean={}, std{}".format(X.mean(axis=0), X.std(axis=0))
Risultati: mean=[ 1.83333333, 78.33333333]), std=[ 0.68718427, 24.94438258])
Notato che la dimensione dellelemento ha una media e std più di 30 volte maggiore del numero di camere da letto, questo produce distorsioni in alcuni algoritmi di calcolo (come reti neurali, svm , knn, ecc.) dove alcune caratteristiche con valori maggiori dominano completamente le altre con valori minori. Per risolvere questo problema, una pratica comune e molto efficace consiste nel trasformare i dati in unità di deviazione standard con media zero, ovvero sottrarre la media e dividere per la deviazione standard, come di seguito:
X_t = (X - X.mean(axis=0))/X.std(axis=0)
La variabile X_t
(X trasformata) contiene le tue caratteristiche in deviazioni standard unitarie con media zero, stampando X_t
ottieni:
array([[-1.21267813, -0.53452248], [ 1.69774938, 2.07127462], [ 0.24253563, 0.06681531], [ 0.24253563, -0.33407655], [-1.21267813, -1.13586028], [ 0.24253563, -0.13363062]])
Guarda come i numeri in entrambe le caratteristiche hanno tutti la stessa grandezza. Se stampi X_t
mean e std ora ottieni
mean=[ 1.11022302e-16 2.08166817e-16], std=[ 1. 1.]
come previsto.