sklearn.preprocessing.normalize 中的规范参数
norm parameters in sklearn.preprocessing.normalize
在sklearn documentation中说“规范”可以是
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).
The documentation about normalization 没有明确说明“l1”、“l2”或“max”是如何计算的。
谁能清除这些?
通俗地说,范数是(向量)长度概念的概括;来自 Wikipedia entry:
In linear algebra, functional analysis, and related areas of mathematics, a norm is a function that assigns a strictly positive length or size to each vector in a vector space.
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.])
在sklearn documentation中说“规范”可以是
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).
The documentation about normalization 没有明确说明“l1”、“l2”或“max”是如何计算的。
谁能清除这些?
通俗地说,范数是(向量)长度概念的概括;来自 Wikipedia entry:
In linear algebra, functional analysis, and related areas of mathematics, a norm is a function that assigns a strictly positive length or size to each vector in a vector space.
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.])