数据归一化方法详解:(0,1)标准化、Z-score标准化和Sigmoid函数
数据归一化方法详解:(0,1)标准化、Z-score标准化和Sigmoid函数
数据归一化是数据挖掘和机器学习中非常重要的预处理步骤,特别是在特征向量表达时。当不同特征的数值范围差异较大时,容易导致数值较小的特征在模型训练中被忽视。因此,对特征向量进行归一化处理,可以确保每个特征都能被分类器平等对待。本文将介绍三种常见的归一化方法,并提供相应的Python实现代码。
1. (0,1)标准化
这是最简单也是最容易想到的方法,通过遍历feature vector里的每一个数据,将最大值(Max)和最小值(Min)记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理:
$$
{x}_{normalization}=\frac{x-Min}{Max-Min}
$$
Python实现:
def MaxMinNormalization(x, Max, Min):
x = (x - Min) / (Max - Min)
return x
在实现时,建议使用numpy库中的np.max()
和np.min()
函数来寻找最大值和最小值,而不是使用Python内置的max()
和min()
函数,除非你更倾向于使用列表来管理数字。
2. Z-score标准化
这种方法通过原始数据的均值(mean)和标准差(standard deviation)来进行数据的标准化。经过处理的数据将符合标准正态分布,即均值为0,标准差为1。这种方法在一定程度上改变了特征的分布,因此在使用时需要谨慎。
转化函数为:
$$
{x}_{normalization}=\frac{x-\mu }{\sigma }
$$
Python实现:
def Z_ScoreNormalization(x, mu, sigma):
x = (x - mu) / sigma
return x
在实现时,可以使用numpy库中的np.average()
函数来计算均值(mu),使用np.std()
函数来计算标准差(sigma)。
3. Sigmoid函数
Sigmoid函数是一个具有S形曲线的函数,是良好的阈值函数,在(0, 0.5)处中心对称,在(0, 0.5)附近有比较大的斜率,而当数据趋向于正无穷和负无穷的时候,映射出来的值就会无限趋向于1和0。虽然Sigmoid函数主要用于阈值分割,但在这里我们将其作为一种归一化方法来使用,只考虑(0, 0.5)作为分割阈值的情况。
公式为:
$$
{x}_{normalization}=\frac{1}{1+{e}^{-x}}
$$
Python实现:
def sigmoid(X, useStatus):
if useStatus:
return 1.0 / (1 + np.exp(-float(X)))
else:
return float(X)
在这个实现中,useStatus
参数用于控制是否使用Sigmoid函数进行归一化,这在调试时非常有用。