Det er almindelig praksis at normalisere data til træning af et neuralt netværk til nul middelværdi og “enheds” standardafvigelse for at reducere eksploderende og forsvindende gradienteffekter osv.
Hvad betyder “unit” std her? Et eksempel ville være rigtig nyttigt.
Kommentarer
- Det betyder lig med 1. For at få det til at dele værdier med standardafvigelsen for de originale data . (Nulværdien kommer fra at trække middelværdien.)
Svar
Det betyder, at du konverterer dine datafunktioner fra dets originale enheder (miles, dollars, forløbet tid, …) til enheder med standardafvigelse. Som du anmodede om følger et meget simpelt eksempel:
Forslag, at du vil forudsige huspriser ud fra to funktioner: antal soveværelser (heltalsenhed) og størrelse (i kvadratmeter enhed), ligesom den fiktive databælg:
import numpy as np X = np.array([[1, 65],[3, 130],[2, 80],[2, 70],[1, 50]])
Bemærk, at hver funktion har meget forskellig gennemsnit og standardafvigelse
print("mean={}, std{}".format(X.mean(axis=0), X.std(axis=0))
Udgange: mean=[ 1.83333333, 78.33333333]), std=[ 0.68718427, 24.94438258])
Bemærk, at funktionsstørrelsen har middelværdi og std mere end 30 gange større end antallet af soveværelser, dette giver forvrængninger i nogle algoritmer beregning (som neurale net, svm , knn osv.) hvor nogle funktioner med større værdier dominerer fuldstændigt de andre med mindre værdier. For at løse det er en almindelig og meget effektiv praksis at transformere dataene til enheder med standardafvigelse med nul gennemsnit, det vil sige, du trækker middelværdien og dividerer med standardafvigelsen, som nedenfor:
X_t = (X - X.mean(axis=0))/X.std(axis=0)
Variablen X_t
(X transformeret) indeholder dine funktioner i enhedsstandardafvigelser med nul gennemsnit, udskrivning X_t
får du:
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]])
Se, hvordan tallene i begge funktioner har samme størrelse. Hvis du udskriver X_t
betyder og std nu får du
mean=[ 1.11022302e-16 2.08166817e-16], std=[ 1. 1.]
som forventet.