1
votes

Normalisations dans sklearn et leurs différences

J'ai lu de nombreux articles suggérant cette formule

x / np.linalg.norm(x)

pour la normalisation

mais quand je creuse quelque part dans le normaliseur de sklearn, j'ai trouvé qu'ils utilisaient cette formule p>

N = (x - min(x))/(max(x)-min(x))

En tant que version ultérieure, utilisez la norme l2 par défaut. Lequel dois-je utiliser? Pourquoi y a-t-il une différence entre les deux?


0 commentaires

3 Réponses :


1
votes

np.ling.norm est donné par:

np.linalg.norm (x) = sqrt ((sum_i_j (abs (x_i_j))) ^ 2)

alors supposons que vous avez:

min(x)= -1
max(x)= 2
max(x)-min(x)=3
X = (0.66 1
     0.33 0)

alors avec ceci vous auriez:

np.linalg.norm(x)= sqr((1+2+0+1)^2)= sqr(16)=4
X = (0.25 0.5
     0    -0.25)

avec l'autre approche vous aurait:

X= (1  2
    0  -1)

Donc le min (x) / max (x) est aussi appelé MinMaxScaler, là toutes les valeurs sont toujours entre 0-1, les autres approches normalisent votre valeurs, mais vous pouvez toujours avoir des valeurs négatives. En fonction de vos prochaines étapes, vous devez décider laquelle utiliser.


0 commentaires

1
votes

D'après la description de l'API

Le normalisateur Scikit-learn met à l'échelle les vecteurs d'entrée individuellement en une norme unitaire (longueur du vecteur).

C'est pourquoi il utilise le régulariseur L2 (vous pouvez également utiliser L1, comme expliqué dans l'API)

Je pense que vous recherchez un scaler au lieu d'un normalisateur par votre description. Veuillez trouver le scaler Min-Max dans ce lien .

En outre, vous pouvez envisager un scaleur standard qui normalise la valeur en supprimant sa moyenne et la met à l'échelle de son écart type.


0 commentaires

2
votes

Il existe différentes techniques de normalisation et sklearn en fournit plusieurs. Veuillez noter que nous examinons ici les tableaux 1d. Pour une matrice, ces opérations sont appliquées à chaque colonne (jetez un œil à cet article pour un exemple détaillé Mise à l'échelle fonctionnalités pour l'apprentissage automatique ) Passons en revue quelques-unes d'entre elles:

  1. Le MinMaxScaler de Scikit-learn effectue (x - min (x)) / (max (x) -min (x)) Ceci met à l'échelle votre tableau de telle manière que vous n'avez que des valeurs comprises entre 0 et 1. Peut être utile si vous souhaitez appliquer une transformation par la suite où aucune valeur négative n'est autorisée (par exemple, une transformation logarithmique ou une mise à l'échelle des pixels RVB comme cela est fait dans certains exemples MNIST)
  2. scikit-learns StandardScaler exécute (xx.mean ()) / x.std () qui centre le tableau autour de zéro et se met à l'échelle par la variance de les caractéristiques. Il s'agit d'une transformation standard et est applicable dans de nombreuses situations, mais gardez à l'esprit que vous obtiendrez des valeurs négatives. Ceci est particulièrement utile lorsque vous avez des données échantillonnées gaussiennes qui ne sont pas centrées autour de 0 et / ou n'ont pas de variance unitaire.

  3. Le Normalizer de Scikit-learn exécute x / np.linalg.norm (x) . Cela définit la longueur de votre tableau / vecteur à 1. Cela peut être utile si vous voulez faire des choses d'algèbre linéaire comme si vous voulez implémenter l'algorithme de Gram-Schmidt.

  4. Le RobustScaler de Scikit-learn peut être utilisé pour mettre à l'échelle des données avec des valeurs aberrantes. La moyenne et l'écart-type ne sont pas robustes aux valeurs aberrantes. Par conséquent, ce scaler utilise la médiane et met les données à l'échelle en plages de quantiles.

  5. Il existe d'autres transformations non linéaires comme QuantileTransformer qui met à l'échelle des plages de quantiles et PowerTransformer qui mappe toute distribution à une distribution similaire à une distribution gaussienne.

  6. / p>

Et il existe de nombreuses autres normalisations utilisées dans l'apprentissage automatique et une grande quantité peut prêter à confusion. L'idée derrière la normalisation des données dans ML est généralement que vous ne voulez pas que votre modèle traite une caractéristique différemment des autres simplement parce qu'elle a une moyenne plus élevée ou une variance plus grande. Dans la plupart des cas standards, j'utilise MinMaxScaler ou StandardScaler selon que la mise à l'échelle en fonction de la variance me semble importante.


0 commentaires