Il est courant de normaliser les données pour entraîner un réseau de neurones à une moyenne nulle et un écart-type « unitaire » pour réduire les effets de gradient qui explosent et disparaissent, etc.
Que signifie « unité » std ici? Un exemple serait vraiment utile.
Commentaires
- Cela signifie égal à 1. Pour obtenir cela, divisez les valeurs par lécart type des données dorigine . (La moyenne zéro vient de la soustraction de la moyenne.)
Réponse
Cela signifie que vous convertissez vos caractéristiques de données de ses unités dorigine (miles, dollars, temps écoulé, …) aux unités décart type. Comme vous lavez demandé, voici un exemple très simple:
Supposons que vous souhaitiez prédire les prix des maisons à partir de deux caractéristiques: le nombre de chambres (unité entière) et la taille (en mètres carrés), comme les données fictives ci-dessous:
import numpy as np X = np.array([[1, 65],[3, 130],[2, 80],[2, 70],[1, 50]])
Notez que chaque entité a une moyenne et un écart-type très différents
print("mean={}, std{}".format(X.mean(axis=0), X.std(axis=0))
Résultats: mean=[ 1.83333333, 78.33333333]), std=[ 0.68718427, 24.94438258])
Remarqué que la taille de lélément a une moyenne et une std plus de 30 fois plus grande que le nombre de chambres à coucher, cela produit des distorsions dans certains calculs dalgorithmes (comme les réseaux neuronaux, svm , knn, etc.) où certaines fonctionnalités avec des valeurs plus grandes dominent complètement les autres avec des valeurs plus petites. Pour résoudre quune pratique courante et très efficace consiste à transformer les données en unités décart type avec une moyenne nulle, cest-à-dire que vous soustrayez la moyenne et divisez par lécart type, comme ci-dessous:
X_t = (X - X.mean(axis=0))/X.std(axis=0)
La variable X_t
(X transformé) contient vos entités en écarts-types unitaires avec une moyenne nulle, imprimant X_t
vous obtenez:
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]])
Regardez comment les nombres dans les deux entités ont tous la même grandeur. Si vous imprimez X_t
mean et std maintenant, vous obtenez
mean=[ 1.11022302e-16 2.08166817e-16], std=[ 1. 1.]
comme prévu.