如何标准化矩阵?

pno*_*nda 18 python algorithm math numpy

基本上,取一个矩阵并改变它,使其平均值等于0,方差为1.我正在使用numpy的数组,所以如果它已经可以做到它更好,但我可以自己实现它,只要我能找到一个算法.

编辑:nvm nimrodm有更好的实现

nim*_*odm 62

以下从每个元素中减去A的平均值(新均值为0),然后将结果标准化为标准偏差.

from numpy import *
A = (A - mean(A)) / std(A)
Run Code Online (Sandbox Code Playgroud)

以上是整个矩阵的标准化,如果A有多个维度,并且您希望单独标准化每个列,请指定:

from numpy import *
A = (A - mean(A, axis=0)) / std(A, axis=0)
Run Code Online (Sandbox Code Playgroud)

在将这些单行程序集成到代码中之前,请务必手动验证这些单行程序的作用.方向或维度的简单改变可以彻底改变(无声地)numpy对它们执行的操作.

  • 您可能只想在“std(A) > 0”处更新“A”,以避免被零和“NaN”值除 (2认同)

小智 10

import scipy.stats as ss

A = np.array(ss.zscore(A))
Run Code Online (Sandbox Code Playgroud)


Doe*_*ata 5

from sklearn.preprocessing import StandardScaler

standardized_data = StandardScaler().fit_transform(your_data)
Run Code Online (Sandbox Code Playgroud)

例子:

>>> 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]])
Run Code Online (Sandbox Code Playgroud)

在大型数据集上效果很好。