0%

机器学习之数据预处理:Sample Normalization 样本归一化

数据预处理作为机器学习中的关键一环,这里介绍其中的Sample Normalization 样本归一化

abstract.png

楔子

对于特征缩放(例如,归一化、标准化等)技术而言,其是对数据集中所有样本的各列特征依次进缩放处理的。而Sample Normalization 样本归一化则是按行对数据集中所有样本依次进行处理的。具体地:对于数据集中的每一个样本而言,先计算其范数,然后用该样本中的每一个元素除以该范数

范数

范数用于衡量一个向量的长度、大小。常见的范数有:

L0范数:又称零范数。其计算的是向量中非零元素的个数。事实上,其并不是数学中一个严格意义上的范数,但却被广泛应用于机器学习领域

L1范数:又称曼哈顿范数。其计算的是向量中所有元素的绝对值之和

L2范数:又称欧几里得范数(欧式范数)。其衡量的是欧几里得空间下的直线距离,即我们常说的长度

L∞范数无穷范数,又称最大范数、切比雪夫范数。 其计算的是向量中绝对值最大的那个元素的值

Lp范数:不难看出,L1范数、L2范数、L∞范数是Lp范数在p取1、取2、无穷大时的特例。自然,当p取3、取4即可得到L3范数、L4范数

应用

使用范数进行样本归一化后,可以使得数据集中任意一个样本向量的(相应的)范数都会变为1。证明过程很简单:这里对样本的x向量使用某种范数的归一化,得到新向量x’

同时,根据范数的性质不难知道,标量乘向量 的范数 等于 标量的绝对值向量的范数。故有:

使用范数对各样本进行归一化的目的在于,消除各样本之间在大小、长度方面的差异,而只关注其方向性。一般地,我们会选用L2范数进行样本归一化。这样数据集中每个样本向量的L2范数都会变为1。这在几何上等价于将数据空间中所有的样本点都投影到了单位超球面的表面。典型应用场景:

  • 文本分析:对TF-IDF向量进行样本归一化后,可以让模型在计算不同长度文档的相似性时,消除文档长度带来的影响
  • 计算余弦相似度:通过提前进行样本归一化的预处理,使得向量长度变为1。显著提高计算效率
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import numpy as np
from sklearn.preprocessing import Normalizer
from numpy import linalg

X = np.array([
[4, 1, 2, 2],
[8, 2, 4, 4],
[40, 10, 20, 20],
[7, 7, 7, 7],
[999, 0, 0, 0],
[0, 0, 37, 0]
])
print(f"原始样本: \n{X}", "\n", "-"*70)

# 创建Normalizer实例,使用L2范数
normalizer = Normalizer(norm='l2')

# 进行样本归一化
X_normalized = normalizer.transform(X)
print(f"L2范数归一化后的样本: \n{X_normalized}", "\n", "-"*70)

# 计算样本归一化后的各样本的L2范数
for i in range(X.shape[0]):
data = X_normalized[i]
# ord为2 表示 L2范数
l2 = linalg.norm(data, ord=2)
print(f"#{i}样本: {data} 的L2范数: {l2}")

输出如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
原始样本: 
[[ 4 1 2 2]
[ 8 2 4 4]
[ 40 10 20 20]
[ 7 7 7 7]
[999 0 0 0]
[ 0 0 37 0]]
----------------------------------------------------------------------
L2范数归一化后的样本:
[[0.8 0.2 0.4 0.4]
[0.8 0.2 0.4 0.4]
[0.8 0.2 0.4 0.4]
[0.5 0.5 0.5 0.5]
[1. 0. 0. 0. ]
[0. 0. 1. 0. ]]
----------------------------------------------------------------------
#0样本: [0.8 0.2 0.4 0.4] 的L2范数: 1.0
#1样本: [0.8 0.2 0.4 0.4] 的L2范数: 1.0
#2样本: [0.8 0.2 0.4 0.4] 的L2范数: 1.0
#3样本: [0.5 0.5 0.5 0.5] 的L2范数: 1.0
#4样本: [1. 0. 0. 0.] 的L2范数: 1.0
#5样本: [0. 0. 1. 0.] 的L2范数: 1.0

参考文献

  • 机器学习 周志华著
  • 机器学习公式详解 谢文睿、秦州著
  • 图解机器学习和深度学习入门 山口达辉、松田洋之著
请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝