为什么要Normalization and Standardization
在机器学习领域中,不同评价指标(即特征向量中的不同特征就是所述的不同评价指标)往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,
为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。
奇异样本数据的存在会引起训练时间增大,同时也可能导致无法收敛,因此,当存在奇异样本数据时,在进行训练之前需要对预处理数据进行归一化;反之,不存在奇异样本数据时,则可以不进行归一化。
目的: 将不同尺度上的评判结果统一到一个尺度上,从而可以作比较,作计算
好处:1)加快了梯度下降求最优解的速度,加快训练网络的收敛性;2)有可能体高精度
归一化的方法
线性归一化 (Min-max normalization 、0-1 normalization)
转换函数:
X
i
∗
=
X
i
−
X
m
i
n
X
m
a
x
−
X
m
i
n
X_i^* = \frac{X_i-X_{min}}{X_{max}-X_{min}}
Xi∗=Xmax−XminXi−Xmin
-
这个方法将一列数据变化到某个固定区间(范围)中,通常这个区间是[0, 1],也可以是各种区间比如[0,255],[-1,1]等。
如果想要将数据映射到[-1,1],则将公式换成:
X i ∗ = X i − X m e a n X m a x − X m i n X_i^* = \frac{X_i-X_{mean}}{X_{max}-X_{min}} Xi∗=Xmax−XminXi−Xmean (X_mean表示均值) -
这种方法比较适用在数值比较集中的情况。缺陷:如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。实际使用中可以用经验常量来替代max和min。否则当有新数据加入时,可能导致max和min的变化,需要重新定义。
-
应用场景:在不涉及距离度量、协方差计算、数据不符合正态分布的时候,可以使用第一种方法或其他归一化方法(不包括Z-score方法)。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围
Z-score标准化
Z-Score 又叫 stand score, z-value, z-score, normal score等, 中文一般译作“标准分数”。它是对某一原始分值进行转换,变成的一个标准分值,该标准分值可使得原来无法比较的数值变得可比。 一个简单的例子,小红英语考了 90 分,语文考了 60 分,请问小红英语和语文哪个考的好? 同样的情况,如果直接比分数,当然是英语好。但是一种显然易见的可能情况是,两门课的难度不一样,也许语文更难,大家都不及格,只有小红及格了;而英语很简单大家都是100分,只有小红90分。这样看来,好像小红的语文要考的更好一些。这里我们可以用 z-score 可以直观的进行比较。
Z-Score转换函数:
X
i
∗
=
X
i
−
μ
σ
X_i^* = \frac{X_i-\mu}{\sigma}
Xi∗=σXi−μ
其中
μ
\mu
μ和
σ
\sigma
σ 分别为原始数据集的均值和方差。
- 该方法将数据变换为均值为0,标准差为1的分布(并不一定是正态分布)。
- 该方法其实也是”线性归一化“的一种。
- 该种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。
- 应用场景:在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,Z-score standardization表现更好。
神经网络归一化
该归一化方法经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。
包括 log对数函数归一化,反正切函数归一化等方法。需要根据数据分布的情况,来决定所使用的非线性函数曲线。
log对数函数归一化 - 转换函数:
X
i
∗
=
l
o
g
10
(
x
)
l
o
g
10
(
m
a
x
)
X_i^* = \frac{log_{10}(x)}{log_{10}(max)}
Xi∗=log10(max)log10(x)
反正切函数归一化 - 转换函数:
X
i
∗
=
a
t
a
n
(
x
)
∗
2
π
X_i^* = \frac{atan(x)*2}{\pi}
Xi∗=πatan(x)∗2
L2范数归一化
L2范数归一化就是特征向量中的每个元素均除以向量的L2范数norm(L2):
向量x(x1,x2,…xn)的L2范数定义为 :
n
o
r
m
(
x
)
=
x
1
2
+
x
2
2
+
.
.
.
+
x
n
2
norm(x) = \sqrt{x_1^2 + x_2^2 + ... +x_n^2}
norm(x)=x12+x22+...+xn2
L2范数归一化转换函数为:
X
i
∗
=
X
i
n
o
r
m
(
x
)
X_i^* = \frac{X_i}{norm(x)}
Xi∗=norm(x)Xi
应用场景
Python实现举例
参考资料
【1】https://blog.youkuaiyun.com/weixin_36604953/article/details/102652160
【2】https://www.jianshu.com/p/967f2199cd8c
【3】https://blog.youkuaiyun.com/yjw123456/article/details/106252908
【4】https://zhuanlan.zhihu.com/p/424518359
【5】https://zhuanlan.zhihu.com/p/488290289
【6】https://blog.youkuaiyun.com/yjw123456/article/details/106252908
【7】https://www.cnblogs.com/pejsidney/p/8031250.html
【8】https://blog.youkuaiyun.com/weixin_43681559/article/details/126918889
【9】http://thisis.yorven.site/blog/index.php/2019/05/07/lijie-z-score/