走向人工智能 —— 数据预处理之归一化

数据归一化是为了将不同表征的数据规约到相同的尺度内,常见的尺度范围有[-1, 1],[0, 1]。对于神经网络、支持向量机(SVM),在数据预处理中使用归一化是必不可少的。当然,对于一些模型,归一化也不是必需的,例如决策树。

对于不具备伸缩不变形的模型而言,各个维度的数据进行归一化是很有意义的,甚至必须的,例如神经网络,SVM,在这类模型中,我们可以将输出-输入关系写成y=f(x),x,y分别为输入、输出,我们假设输入x是向量。如果x中所有维度的数据都不进行归一化,那么这些数据往往都是有单位的,数值上的表现也不一样。举个例子,我们使用神经网络评估一个人的健康状况,样本包括血压,血小板数量,心跳。采样数据中,我们发现血压一般的70-110毫米汞柱,血小板数量100000个每毫升,心跳60每分钟。如果不归一化,直接将这些值输入到x中,血小板数量这一项将会对网络产生输出很大的影响,而心跳的影响相对而言就可以几乎忽略了。再说通俗点,在x,y坐标上,你画一个(1,10000)的点,再画一个(0.1, 8000)的点,很明显的,在y的影响下,x的变化几乎可以不计,尽管它变化了90%,而y才变化了20%。


数据归一化方法:

一、线性归一化(Linear Normalization):

f(x) = (x - min) / (max - min)

其中,min和max分别代表x所属区间的最小值和最大值。

特点:数据被均匀地归一到0~1之间;

需求:目标值的上界和下界是明确知晓的,例如上图中,我们假设了目标值的最小值为0,最大值为1。

这种归一化方式是我们最常见的,在大多数问题中都可以使用,例如在图像识别中,将图像的灰度值0~255归整到0~1内。

二、Sigmod归一化(Sigmod Normalization):

f(x) = 1 / (1 + exp(-ax+b))

假设 a=0.1,b=5,其图像为


这种归一化方式,当我们对数据分布的中间地带需要着重分析,而对两端数据并不是很敏感时,可以使用,具体的a和b根据问题去调整,其中a影响的是上图中蓝色曲线的陡峭程度,b影响的是曲线的平移。

假设我们需要预测人们幸福感的高低,选择的影响因素有年龄、学历、收入高低等。数据样本中,绝大多数分布在年收入5w-40w,但是也有极端的在0.5w的极低收入和1000w的极高收入,并且我们还发现,在7w-15w这个区间内,人们的幸福感对收入的高低非常敏感。当然在一些简单处理中,可以设定一个区间范围,例如[1w, 100w],然后将小于1w的当作1w,将高于100w的当作100w,但是这种处理是相对简单粗暴的,为了不消除极端数据的效果,以及充分考虑中间敏感区间,我们可以使用Sigmod归一化方式,能够有效地扩大中间数据的差异性。

与该思想类似的还有反正切函数归一化:

f(x) = atan(ax-b) / PI

其中,PI为圆周率3.14159…

特点:数据按“敏感性的平均化”被归一到0~1之间;

需求:目标值的上界和下界不需要明确知晓,并且对两端数据值不敏感,而对中间部分的数据值敏感。

三、Z-score归一化(Z-score Normalization):

f(x) = (x - q) / s

其中,q是原始数据x的均值, s是原始数据的标准差。归一化的数据符合正态分布,并且其均值为0,标准为1。

Z-score表示原始数据偏离均值的距离长短,而该距离度量的标准是标准方差。该种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果并不好。Z-score的数据分布如下图所示:

对于较大数量的数据而言,将会有68.26%的数据归一化到[-1, 1]之间,95.44%的数据归一化到[-2., 2]之间99%的数据归一到[-3, 3]之间。

特点:根据数据值的分布情况来进行分布概率的归一化。

需求:原始数据至少近似呈现正态分布。

举报
评论 0