sklearn.preprocessing.normalize中的norm参数

时间:2018-01-12 18:48:19

标签: machine-learning scikit-learn

sklearn documentation中说“norm”可以是

norm : ‘l1’, ‘l2’, or ‘max’, optional (‘l2’ by default)

The norm to use to normalize each non zero sample (or each non-zero feature if axis is 0).

我熟悉地阅读its user documentation有关正常化的内容,但仍然不太清楚'l1','l2'或'max'是什么。

任何人都可以清楚这件事吗?

1 个答案:

答案 0 :(得分:4)

非正式地说,规范是(向量)长度概念的概括;来自Wikipedia entry

  

在线性代数,功能分析和相关的数学领域,范数是一个赋予严格正长度大小的函数到向量空间中的每个向量。

L2-norm是通常的欧几里德长度,即平方向量元素之和的平方根。

L1-norm是向量元素的绝对值之和。

max-norm(有时也称为无限范数)只是最大绝对向量元素。

正如文档所说,这里的归一化意味着使我们的向量(即数据样本)具有单位长度,因此指定 长度(即哪个标准)也是必需的。

您可以轻松验证上述内容,以适应docs

中的示例
from sklearn import preprocessing 
import numpy as np

X = [[ 1., -1.,  2.],
     [ 2.,  0.,  0.],
     [ 0.,  1., -1.]]

X_l1 = preprocessing.normalize(X, norm='l1')
X_l1
# array([[ 0.25, -0.25,  0.5 ],
#        [ 1.  ,  0.  ,  0.  ],
#        [ 0.  ,  0.5 , -0.5 ]])

您可以通过简单的目视检查验证X_l1元素的绝对值总和为1.

X_l2 = preprocessing.normalize(X, norm='l2')
X_l2
# array([[ 0.40824829, -0.40824829,  0.81649658],
#        [ 1.        ,  0.        ,  0.        ],
#        [ 0.        ,  0.70710678, -0.70710678]])

np.sqrt(np.sum(X_l2**2, axis=1)) # verify that L2-norm is indeed 1
# array([ 1.,  1.,  1.])