MATLAB数据预处理——归一化和标准化

输入/输出数据的预处理

尺度变换

尺度变换也称归一化或标准化,是指通过变换处理将网络的输入/输出数据限制在[0,1]或[-1,1]区间内。进行尺度变换的原因有:

(1)网络的各个输入数据常常具有不同的物理意义和不同的量纲。尺度变换使所有分量都在0-1和-1-1之间变化,从而使网络训练从一开始就给各输入分量以同等重要的地位。

(2)BP神经网络的神经元均采用Sigmoid变换函数,变换后可防止因净输入的绝对值过大而使神经元输出饱和,继而使权值调整进入误差曲面的平坦区。

(3)Sigmoid变换函数的输出在0-1或-1-1之间,作为教师信号的期望输出数据如不进行变换处理,势必使数值大的分量绝对误差大,数值小的分量绝对误差小,网络训练只针对输出的总误差调整权值,其结果是在总误差中占份额小的输出分量相对误差较大,对输出量进行尺寸变换后这个问题可以迎刃而解。

当输入/输出向量的各个分量量纲不同时,应对不同的分量在其取值范围内分别进行变换;当各分量物理意义相同且为同一量纲时,应在整个数据范围内确定最大值和最小值,进行统一的变换处理。

将输入/输出数据变换为[0,1]区间的值常用以下变换式:

{{\bar{x}}_{i}}=\frac{{{x}_{i}}-{{x}_{\min }}}{{{x}_{\max }}-{{x}_{\min }}}

其中,x_i代表输入/输出数据,{x}_{\min }代表数据变化的最小值,{x}_{\max }代表数据变化的最大值。

将输入/输出数据变换为[-1,1]区间的值常用以下变换式:

{{x}_{mid}}=\frac{{{x}_{\max }}+{{x}_{\min }}}{2}

{{\bar{x}}_{i}}=\frac{{{x}_{i}}-{{x}_{\min }}}{\frac{1}{2}({{x}_{\max }}-{{x}_{\min }})}

其中,{x}_{mid}代表数据变化范围的中间值,按照上述变换后,处于中间值的原始数据转化为0,而最大值和最小值分别转化为1和-1。当输入或输出向量中的某个分量取值过于密集时,对其进行以上预处理可以将数据点拉开距离。

分布变换

尺度变换是一种线性变换,当样本的分布不合理时,线性变换只能统一样本数据的变化范围,而不能改变其分布归来吧。适于网络训练的样本分布应较为均匀,响应的样本分布曲线较为平坦。当样本分布不理想时,最常用的变换是对数变换,其他常用的还有平方根、立方根等。由于变换是非线性的,其结果不仅压缩了数据变化的范围,而且改变了其分布规律。

Matlab--mapminmax数据归一化

[Y,PS] = mapminmax(X)

函数功能: 将矩阵的每一行压缩到 [-1,1],其中当前行的最大值变为1,最小值变为-1 。(这是默认的参数)

扩展:(修改参数)

  1. [Y,PS] = mapminmax(X,YMIN,YMAX) 将矩阵的每一行压缩到 [YMIN,YMAX],其中当前行的最大值变为YMAX,最小值变为YMIN。

  2. [Y,PS] = mapminmax(X,FP) 其中FP为结构体类型,这时就是将矩阵的每一行压缩到[FP.ymin, FP.ymax]中。

Y = mapminmax(‘apply’,X,PS)

函数功能: 利用上一步得到的PS来映射X到Y,也就是说PS中含有xmin,xmax,ymin,ymax,使用这些来从X映射到Y

X = mapminmax(‘reverse’,Y,PS)

利用归一化后的Y和PS重新得到X

发表评论

好好学习,天天向上

资源中心 BL云端