Comment normaliser une matrice?

fondamentalement, prendre une matrice et la changer de sorte que sa moyenne est égale à 0 et la variance est 1. J'utilise les tableaux de numpy alors s'il peut déjà le faire, c'est mieux, mais je peux l'implémenter moi-même aussi longtemps que je peux trouver un algorithme.

edit: nvm nimrodm a une meilleure mise en œuvre

17
demandé sur duffymo 2010-12-28 10:07:09

5 réponses

prenez chaque élément et soustrayez avec la moyenne puis divisez par l'écart-type.

Tirer sur moi, je ne connais pas python. En général, le ci-dessus est

mu = Average()
sig = StandardDeviation()
for(i=0;i<rows;i++)
{
   for(j=0;j<cols;j++)
   {
       A[i,j] = (A[i,j]-mu)/sig;
   }
}
-2
répondu ja72 2010-12-28 07:13:55

la valeur suivante soustrait la moyenne de A de chaque élément (la nouvelle moyenne est 0), puis normalise le résultat par l'écart-type.

from numpy import *
A = (A - mean(A)) / std(A)

ce qui précède est pour standardiser la matrice entière dans son ensemble, Si A a plusieurs dimensions et que vous voulez standardiser chaque colonne individuellement, spécifiez le axe:

from numpy import *
A = (A - mean(A, axis=0)) / std(A, axis=0)

vérifiez toujours à la main ce que font ces monocouches avant de les intégrer dans votre code. Un simple changement d'orientation ou les dimensions peuvent changer radicalement (silencieusement) les opérations que numpy exécute sur eux.

55
répondu nimrodm 2016-04-03 17:45:03
import scipy.stats as ss

A = np.array(ss.zscore(A))
9
répondu AmanRaj 2016-04-17 16:23:00
from sklearn.preprocessing import StandardScaler

standardized_data = StandardScaler().fit_transform(your_data)

Exemple:

>>> import numpy as np
>>> from sklearn.preprocessing import StandardScaler

>>> data = np.random.randint(25, size=(4, 4))
>>> data
array([[17, 12,  4, 17],
       [ 1, 16, 19,  1],
       [ 7,  8, 10,  4],
       [22,  4,  2,  8]])

>>> standardized_data = StandardScaler().fit_transform(data)
>>> standardized_data
array([[ 0.63812398,  0.4472136 , -0.718646  ,  1.57786412],
       [-1.30663482,  1.34164079,  1.55076242, -1.07959124],
       [-0.57735027, -0.4472136 ,  0.18911737, -0.58131836],
       [ 1.24586111, -1.34164079, -1.02123379,  0.08304548]])

Fonctionne bien sur les grands ensembles de données.

3
répondu DoesData 2016-12-03 20:36:10

Utiliser sklearn.preprocessing.scale.

http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.scale.html

Ici est un exemple.

>>> from sklearn import preprocessing
>>> import numpy as np
>>> X_train = np.array([[ 1., -1.,  2.],
...                     [ 2.,  0.,  0.],
...                     [ 0.,  1., -1.]])
>>> X_scaled = preprocessing.scale(X_train)
>>> X_scaled
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])

http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling

1
répondu Yuya Takashina 2018-02-07 08:12:02