Gyakori gyakorlat az adatok normalizálása az ideghálózat nulla középértékre és az “egység” szórásra, hogy csökkentse a robbanó és eltűnő gradiens hatásokat stb.
Mit jelent itt az “unit” std? Egy példa nagyon hasznos lehet.
Megjegyzések
- Ez azt jelenti, hogy egyenlő 1-vel. Ahhoz, hogy megossza az értékeket az eredeti adatok szórásával . (A nulla átlag az átlag kivonásával jön létre.)
Válasz
Ez azt jelenti, hogy átalakítja az adatfunkcióit eredeti mértékegységeitől (mérföld, dollár, eltelt idő, …) a szórás mértékegységéig. Ahogy kérted, nagyon egyszerű példa következik:
Tegyük fel, hogy a ház árait két jellemző alapján kívánja megjósolni: a hálószobák száma (egész egység) és a méret (négyzetméter egységben kifejezve), például a fiktív adatmotor:
import numpy as np X = np.array([[1, 65],[3, 130],[2, 80],[2, 70],[1, 50]])
Figyelje meg, hogy az egyes jellemzőknek nagyon különböző az átlagos és a szórása
print("mean={}, std{}".format(X.mean(axis=0), X.std(axis=0))
Kimenetek: mean=[ 1.83333333, 78.33333333]), std=[ 0.68718427, 24.94438258])
Észrevette, hogy a funkció mérete átlagosan több mint 30x nagyobb, mint a hálószoba száma, ez torzulásokat okoz egyes algoritmusok számításában (például ideghálók, svm , knn stb.) ahol egyes nagyobb értékű jellemzők teljesen uralják a többieket kisebb értékekkel. Ennek megoldására egy általános és nagyon hatékony gyakorlat az, ha az adatokat standard deviáció egységekké alakítjuk nulla átlaggal, vagyis kivonjuk az átlagot, és elosztjuk a szórással, mint ordít:
X_t = (X - X.mean(axis=0))/X.std(axis=0)
A X_t
(X átalakítva) változó az Ön jellemzőit egységnyi szórásban, nulla átlaggal tartalmazza, nyomtatva X_t
kapsz:
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]])
Nézd meg, hogy a két funkcióban szereplő számok ugyanolyan nagyságúak. Ha a X_t
mean és std szót kinyomtatja, akkor a várt módon
mean=[ 1.11022302e-16 2.08166817e-16], std=[ 1. 1.]
kap.