当前深度学习的预处理方法
1、中心化/零均值化
-
零均值化就是将每一维原始数据减去每一维数据的平均值,将结果代替原始数据
-
在深度学习中,一般我们会把喂给网络模型的训练图片进行预处理,使用最多的方法就是零均值化(zero-mean) / 中心化,简单说来,它做的事情就是,对待训练的每一张图片的特征,都减去全部训练集图片的特征均值,这么做的直观意义就是,我们把输入数据各个维度的数据都中心化到0了。几何上的展现是可以将数据的中心移到坐标原点。如下图中zero-centered data(当然,其实这里也有不同的做法:我们可以直接求出所有像素的均值,然后每个像素点都减掉这个相同的值;稍微优化一下,我们可以在RGB三个颜色通道分别做这件事)
程序代码
例1:
import numpy as np
import matplotlib.pyplot as plt
from numpy import random
x = random.rand(50,2) #随机生成一个50*2(50个样本,2维)的实数矩阵
print(x)
plt.scatter(x[:,1],x[:,0],color="red") #以x的第二列为各点的横坐标,第一列为纵坐标
new_ticks = np.linspace(-1, 1, 5) #固定坐标轴在-1到1之间,共5个值
plt.xticks(new_ticks)
plt.yticks(new_ticks)
plt.savefig('./ 均值化.jpg')
plt.show()
#***************零值化******************#
x -= np.mean(x,axis = 0) #去均值
print(x)
plt.scatter(x[:,1],x[:,0],color="black")
new_ticks = np.linspace(-1, 1, 5)
plt.xticks(new_ticks)
plt.yticks(new_ticks)
plt.show()
2、标准化/归一化
归一化就是将原始数据归一到相同尺度,就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内,下面有几种方法来实现归一化,:
-
(1)原始数据除以数据绝对值的最大值,以保证所有的数据归一化后都在-1到1之间。
-
(2)原始数据零均值后,再将每一维的数据除以每一维数据的标准差(Z-score标准化方法)
x ∗ = x − u σ { {\rm{x}}^ * } = \frac{ {x - u}}{\sigma } x∗=σx−u
①本方法要求原始数据的分布近似为高斯分布,否则归一化的效果会比较差
②应用场景:在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,Z-score standardization表现更好。
- (3)最大最小标准化,使数据归一化到[0,1]之间,
x ′ = x − min ( x ) max ( x ) − min ( x ) x\prime = \frac{ {x - \min (x)}}{ {\max (x) - \min (x)}} x′=max(x)−min(x)x−min(x)
①该方法适合用于数值比较集中的情况;缺陷:如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。实际使用中可以用经验常量来替代max和min。
②应用场景:在不涉及距离度量、协方差计算、数据不符合正态分布的时候,可以使用该方法或其他归一化方法(不包括Z-score方法)。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围
-
(4)非线性归一化
本归一化方法经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射, 该方法包括 log,正切等,需要根据数据分布的情况,决定非线性函数的曲线:
①log对数函数转换方法
y = log10(x),即以10为底的对数转换函数,对应的归一化方法为:x’ = log10(x) /log10(max),其中max表示样本数据的最大值,并且所有样本数据均要大于等于1.
②atan反正切函数转换方法
利用反正切函数可以实现数据的归一化,即x’ = atan(x)*(2/pi),使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上.
③L2范数归一化方法
L2范数归一化就是特征向量中每个元素均除以向量的L2范数,
向量
X ( x 1 , x 2 , . . . , x n ) X({x_1},{x_2},...,{x_n}) X(x1,x2,...,xn) L 2 {L^2} 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,要使得x归一化到单位 L 2 {L^2} L2范数,即建立一个从x到x’的映射,使得x’的 L 2 {L^2} L