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
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;
}
}
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.
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.
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...]])