比较全的深度学习数据预处理方法

1、中心化/零均值化

  • 零均值化就是将每一维原始数据减去每一维数据的平均值,将结果代替原始数据

  • ​在深度学习中,一般我们会把喂给网络模型的训练图片进行预处理,使用最多的方法就是零均值化(zero-mean) / 中心化,简单说来,它做的事情就是,对待训练的每一张图片的特征,都减去全部训练集图片的特征均值,这么做的直观意义就是,我们把输入数据各个维度的数据都中心化到0了。几何上的展现是可以将数据的中心移到坐标原点。如下图中zero-centered data(当然,其实这里也有不同的做法:我们可以直接求出所有像素的均值,然后每个像素点都减掉这个相同的值;稍微优化一下,我们可以在RGB三个颜色通道分别做这件事)

程序代码
1import 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=σxu

​ ①本方法要求原始数据的分布近似为高斯分布,否则归一化的效果会比较差

​ ②应用场景:在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用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)xmin(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

  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值