Det är vanligt att normalisera data för träning av ett neuralt nätverk till noll medelvärde och ”enhets” standardavvikelse för att minska exploderande och försvinnande gradienteffekter etc.
Vad betyder ”enhet” här här? Ett exempel kan vara till stor hjälp.
Kommentarer
- Det betyder lika med 1. För att få det att dela värden med standardavvikelsen för den ursprungliga datan . (Nollmedlet kommer från att subtrahera medelvärdet.)
Svar
Det betyder att du konverterar dina datafunktioner från sina ursprungliga enheter (miles, dollar, förfluten tid, …) till enheter med standardavvikelse. Som du begärde följer ett mycket enkelt exempel:
Föreslå att du vill förutsäga huspriser från två funktioner: antal sovrum (helhet) och storlek (i kvadratmeter enhet), som den fiktiva databellen:
import numpy as np X = np.array([[1, 65],[3, 130],[2, 80],[2, 70],[1, 50]])
Observera att varje funktion har väldigt olika medelvärden och standardavvikelse
print("mean={}, std{}".format(X.mean(axis=0), X.std(axis=0))
Utgångar: mean=[ 1.83333333, 78.33333333]), std=[ 0.68718427, 24.94438258])
Observerat att funktionsstorleken har medelvärde och std mer än 30 gånger större än antalet sovrum, detta ger snedvridningar i vissa algoritmberäkningar (som neurala nät, svm , knn, etc) där vissa funktioner med större värden dominerar helt de andra med mindre värden. För att lösa det är en vanlig och mycket effektiv metod att transformera data till enheter med standardavvikelse med noll medelvärde, det vill säga du subtraherar medelvärdet och delar med standardavvikelsen, som nedan:
X_t = (X - X.mean(axis=0))/X.std(axis=0)
Variabeln X_t
(X transformerad) innehåller dina funktioner i enhetsstandardavvikelser med noll medelvärde, utskrift X_t
du får:
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]])
Titta på hur siffrorna i båda funktionerna har samma storlek. Om du skriver ut X_t
betyder och std nu får du
mean=[ 1.11022302e-16 2.08166817e-16], std=[ 1. 1.]
som förväntat.