sklearn会发生什么类型的规范化

时间:2018-02-03 19:57:07

标签: python pandas scikit-learn normalize

我有一个矩阵,我试图通过将每个特征列转换为零均值和单位标准差来进行标准化。

我有以下使用的代码,但我想知道该方法是否实际执行了我尝试的方法,或者它是否使用了不同的方法。

from sklearn import preprocessing

mat_normalized = preprocessing.normalize(mat_from_df)

2 个答案:

答案 0 :(得分:2)

sklearn.preprocessing.normalize将每个样本向量缩放到单位范数。 (默认轴是1,而不是0.)这是证明:

from sklearn.preprocessing import normalize

np.random.seed(444)
data = np.random.normal(loc=5, scale=2, size=(15, 2))
np.linalg.norm(normalize(data), axis=1)
# array([ 1.,  1.,  1.,  1.,  1.,  1., ...

听起来你正在寻找sklearn.preprocessing.scale将每个特征向量缩放到~N(0,1)。

from sklearn.preprocessing import scale

# Are the scaled column-wise means approx. 0.?
np.allclose(scale(data).mean(axis=0), 0.)
# True

# Are the scaled column-wise stdevs. approx. 1.?
np.allclose(scale(data).std(axis=0), 1.)
# True

答案 1 :(得分:1)

the documentation州相似:

sklearn.preprocessing.normalize(X, norm='l2',
                                axis=1, copy=True,
                                return_norm=False)
     

将输入向量分别缩放到单位范数(向量长度)。

因此它采用标准(默认为L2范数),然后确保向量是单位。

因此,如果我们将 n×m - 矩阵作为输入,则输出为 n×m - 矩阵。每个 m -vector都被规范化。对于norm='l2'(默认值),这意味着计算长度(通过组件的平方和的平方根),并且每个元素除以该长度,使得结果是长度为1的向量。