如何标准化矩阵?

27 投票
5 回答
63031 浏览
提问于 2025-04-16 09:07

简单来说,就是对一个矩阵进行处理,使得它的平均值变成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对它们执行的操作。

撰写回答