Běžnou praxí je normalizace dat pro trénování neurální sítě na nulovou střední hodnotu a „jednotkovou“ směrodatnou odchylku ke snížení explodujících a mizejících efektů gradientu atd.
Co zde znamená „jednotka“? Příklad by byl opravdu užitečný.
Komentáře
- Znamená to rovné 1. Chcete-li získat, vydělíte hodnoty standardní odchylkou původních dat . (Nulový průměr pochází z odečtení průměru.)
Odpověď
Znamená to, že převádíte své datové funkce z původních jednotek (míle, dolary, uplynulý čas, …) na jednotky standardní odchylky. Jak jste požadovali, následuje velmi jednoduchý příklad:
Předpokládejme, že chcete předpovědět ceny domů ze dvou funkcí: počet pokojů (celá jednotka) a velikost (v jednotkách čtverečních metrů), jako jsou fiktivní data níže:
import numpy as np X = np.array([[1, 65],[3, 130],[2, 80],[2, 70],[1, 50]])
Všimněte si, že každá funkce má velmi odlišnou střední a standardní odchylku
print("mean={}, std{}".format(X.mean(axis=0), X.std(axis=0))
Výstupy: mean=[ 1.83333333, 78.33333333]), std=[ 0.68718427, 24.94438258])
Všimněte si, že velikost objektu má průměr a je více než 30x větší než počet ložnic, což při některých výpočtech algoritmů (jako jsou neuronové sítě, svm) způsobí zkreslení , knn atd.), kde některé funkce s vyššími hodnotami zcela dominují ostatním s menšími hodnotami. Běžným a velmi efektivním postupem je transformace dat na jednotky standardní odchylky s nulovým průměrem, to znamená, že odečtete průměr a vydělíte směrodatnou odchylku, například níže:
X_t = (X - X.mean(axis=0))/X.std(axis=0)
Proměnná X_t
(transformovaná X) obsahuje vaše funkce ve standardních odchylkách jednotek s nulovým průměrem, tiskne X_t
dostanete:
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]])
Podívejte se, jak mají čísla v obou funkcích stejnou velikost. Pokud vytisknete X_t
mean a std, dostanete
mean=[ 1.11022302e-16 2.08166817e-16], std=[ 1. 1.]
podle očekávání.