基本上,取一个矩阵并将其更改为平均值等于0且方差等于1。我正在使用numpy的数组,所以如果它已经可以做到,那就更好了,但只要我能找到算法,我也可以自己实现。
编辑:算了,nimrodm有一个更好的实现。
基本上,取一个矩阵并将其更改为平均值等于0且方差等于1。我正在使用numpy的数组,所以如果它已经可以做到,那就更好了,但只要我能找到算法,我也可以自己实现。
编辑:算了,nimrodm有一个更好的实现。
import numpy as np
A = (A - np.mean(A)) / np.std(A)
以上是为了统一整个矩阵的标准化,如果A具有多个维度并且您想单独将每一列标准化,请指定 axis:
import numpy as np
A = (A - np.mean(A, axis=0)) / np.std(A, axis=0)
在将这些一行代码集成到您的代码之前,请通过手动验证确保它们的功能。 方向或尺寸的简单更改可能会极大地(悄无声息地)改变numpy对它们执行的操作。
std(A) > 0
的情况下更新 A
,以避免除以零和 NaN
值。 - Ciprian Tomoiagăimport scipy.stats as ss
A = np.array(ss.zscore(A))
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]])
在大型数据集上表现良好。
sklearn.preprocessing.scale
。以下是一个示例。http://scikit-learn.org/stable/modules/generated/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...]])
import numpy as np
A = np.array([[1,2,6], [3000,1000,2000]]).T
A_means = np.mean(A, axis=0)
A_centr = A - A_means
A_norms = np.linalg.norm(A_centr, axis=0)
A_std = A_centr / A_norms