Как мне стандартизировать матрицу? - PullRequest
18 голосов
/ 28 декабря 2010

По сути, возьмите матрицу и измените ее так, чтобы ее среднее значение равнялось 0, а дисперсия равнялась 1. Я использую массивы numpy, так что если он уже может это сделать, то лучше, но я могу реализовать это сам, пока яможно найти алгоритм.

edit: nvm nimrodm имеет лучшую реализацию

Ответы [ 5 ]

60 голосов
/ 28 декабря 2010

Следующее вычитает среднее значение A из каждого элемента (новое среднее значение равно 0), затем нормализует результат на стандартное отклонение.

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

Выше приведено для стандартизации всей матрицы в целом. Если A имеет много измерений и вы хотите стандартизировать каждый столбец по отдельности, укажите ось :

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

Всегда проверяйте вручную, что делают эти однострочники, прежде чем интегрировать их в свой код. Простое изменение ориентации или размера может радикально (беззвучно) изменить операции, которые numpy выполняет над ними.

9 голосов
/ 17 апреля 2016
import scipy.stats as ss

A = np.array(ss.zscore(A))
4 голосов
/ 03 декабря 2016
from sklearn.preprocessing import StandardScaler

standardized_data = StandardScaler().fit_transform(your_data)

Пример:

>>> 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]])

Хорошо работает на больших наборах данных.

1 голос
/ 07 февраля 2018

Использование sklearn.preprocessing.scale.

http://scikit -learn.org / стабильный / модули / полученные / sklearn.preprocessing.scale.html

Вот пример.

>>> 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 / стабильный / модули / preprocessing.html # стандартизация или среднеквадратичное удаление-и-вариантность масштабирование

0 голосов
/ 28 декабря 2010

Взять каждый элемент и вычесть среднее значение, а затем разделить на стандартное отклонение.

Пристрели меня, я не знаю питона. В целом, выше

mu = Average()
sig = StandardDeviation()
for(i=0;i<rows;i++)
{
   for(j=0;j<cols;j++)
   {
       A[i,j] = (A[i,j]-mu)/sig;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...