如何标准化矩阵?
简单来说,就是对一个矩阵进行处理,使得它的平均值变成0,方差变成1。我在用numpy的数组,如果numpy已经有现成的方法那就更好了,不过只要我能找到算法,我自己也可以实现。
补充:算了,nimrodm有更好的实现方法。
5 个回答
6
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]])
在处理大数据集时效果很好。
13
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。
有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据不完整。这就像是你想把水从一个桶倒到另一个桶,但发现第一个桶里有一些杂物,导致水流不畅。
为了避免这些问题,我们可以使用一些工具和方法来确保数据的质量。就像在倒水之前,先把桶里的杂物清理干净,这样水才能顺利流出。
总之,处理数据就像是一个小小的水流转移过程,我们需要确保每一步都顺利进行,这样才能得到我们想要的结果。
import scipy.stats as ss
A = np.array(ss.zscore(A))
78
下面的代码是把A的平均值从每个元素中减去,这样处理后新得到的平均值就是0,然后再用标准差来规范化结果。
import numpy as np
A = (A - np.mean(A)) / np.std(A)
上面的代码是针对整个矩阵进行标准化的。如果A有很多维度,而你想要单独标准化每一列,就需要指定一下轴:
import numpy as np
A = (A - np.mean(A, axis=0)) / np.std(A, axis=0)
在把这些简短的代码整合到你的程序之前,最好先手动检查一下它们的作用。因为简单的方向或维度的改变,可能会悄悄地影响numpy对它们执行的操作。