数据变换

对于具有不同量级或不同单位的数据,在进行数理统计之前,往往需要进行处理,使数据在更平等的条件下进行分析。这里主要介绍数据的标准化和归一化。[大谦MATLAB,dqmatlab点com]

标准化

假设xi为原观测值,\(\overline{X}\)为数据均值,S为标准差,则标准化后的观测值xi'为

\({x}_{i}^{ }=\frac{{x}_{i}-\overline{x}}{S}=\frac{{x}_{i}-\overline{x}}{\sqrt{\frac{\sum_{i=1}^{n} {({x}_{i}-\overline{X})}}{n-1}}}\), (1-1)

其中\(\overline{X}\)为样本均值。如果对总体数据进行标准化,则公式1-1中,\(\overline{X}\)换为总体均值,n-1换为n即可。

在MATLAB中用zscore函数实现数据的标准化。该函数的调用格式为:

Z = zscore(X) 返回X每个元素的z得分,X每列数据的均值为0,标准差为1。Z与X大小相同。

Z = zscore(X,flag) 使用flag标示的标准差对X进行标准化。如果flag为0(默认),则函数使用样本的标准差对X进行标准化,计算标准差的公式里面,除数取n-1。zscore(X,0)与zscore(X)等价。如果flag为1,函数使用总体的标准差对X进行标准化,计算标准差的公式里面,除数取n。

Z = zscore(X,flag,dim) 按照指定的维进行标准化。如果dim=1,对X的列数据进行标准化,如果dim=2,对X的行数据进行标准化。

[Z,mu,sigma] = zscore(___) 还返回均值mu和标准差sigma。

下面产生一个5行3列的随机数矩阵,然后用zscore函数对每列数据进行标准化。

code.matlab
>> A = rand(5,3)
A =
    0.5328    0.6225    0.2305
    0.3507    0.5870    0.8443
    0.9390    0.2077    0.1948
    0.8759    0.3012    0.2259
    0.5502    0.4709    0.1707
>> B=zscore(A)
B =
   -0.4697    1.0277   -0.3584
   -1.2012    0.8304    1.7824
    1.1621   -1.2813   -0.4829
    0.9088   -0.7607   -0.3743
   -0.4000    0.1839   -0.5668
>> mean(B)
ans =
   1.0e-16 *
   -0.5551    0.2776   -0.8882
>> std(B)
ans =
    1.0000    1.0000    1.0000

B为标准化以后生成的矩阵,用mean函数和std函数计算每列的均值和标准差。

归一化

假设xi为原观测值,xmax为最大值,xmin为最小值,则归一化后的观测值为

\[{x}_{i}^{ }=\frac{{x}_{i}-{x}_{min}}{{x}_{max}-{x}_{min}}\]

归一化以后的数据介于0~1之间,常常根据需要映射到-1~1之间或0~255之间。

在MATLAB中,如果安装了神经网络工具箱,可以用mapminmax函数实现数据的极差标准化。该函数的调用格式为:

code.matlab
[Y,PS] = mapminmax(X,YMIN,YMAX)

对X每行的数据进行极差标准化。YMIN和YMAX分别为Y每行生成值的最小值和最大值,默认值分别为-1和1。

下面产生一个3行5列的随机数矩阵,然后用mapminmax函数对每列数据进行标准化。

code.matlab
>> A = rand(3,5)
A =
    0.7112    0.2967    0.5079    0.8010    0.7303
    0.2217    0.3188    0.0855    0.0292    0.4886
    0.1174    0.4242    0.2625    0.9289    0.5785
>> [B,PS]=mapminmax(A)
B =
    0.6439   -1.0000   -0.1625    1.0000    0.7197
   -0.1618    0.2606   -0.7549   -1.0000    1.0000
   -1.0000   -0.2439   -0.6424    1.0000    0.1365
PS =
         name: 'mapminmax'
        xrows: 3
         xmax: [3x1 double]
         xmin: [3x1 double]
        xrange: [3x1 double]
        yrows: 3
         ymax: 1
         ymin: -1
        yrange: 2
         gain: [3x1 double]
       xoffset: [3x1 double]
    no_change: 0

B矩阵是极差标准化后生成的矩阵,mapminmax函数对每行数据进行计算,默认时生成的值介于-1和1之间。也可以按照语法介绍,指定生成的值的最小值和最大值。