Aer*_*rin 0 python machine-learning normalization scikit-learn
在sklearn文档中,“规范”可以是
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).
Run Code Online (Sandbox Code Playgroud)
而且,我认真阅读了有关规范化的用户文档,但对于“ l1”,“ l2”或“ max”的含义仍然不太清楚。
谁能清除这些东西?
非正式地讲,规范是对(向量)长度的概念的概括。从维基百科条目:
在线性代数,泛函分析和数学的相关领域中,范数是为向量空间中的每个向量分配严格正数的长度或大小的函数。
所述L2范数是通常的欧几里德长度,即平方矢量元素的总和的平方根。
的L1范数是向量元素的绝对值的总和。
的最大范数(有时也称作∞范数)是简单地将最大绝对向量元素。
如文档所述,规范化是指使我们的向量(即数据样本)具有单位长度,因此也需要指定哪个长度(即哪个范数)。
您可以轻松地从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 ]])
Run Code Online (Sandbox Code Playgroud)
您可以通过简单的目视检查来验证X_l1sum 元素的绝对值是否等于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.])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3656 次 |
| 最近记录: |