前馈神经网络输入的归一化

Normalization of inputs of a feedforward Neural network

假设我有一个时间序列信号的不同特征的 mxn 矩阵(第 1 列表示最后 n 个样本的线性回归,第 2 列表示最后 n 个样本的平均值,第 3 列表示局部最大值不同时间序列但相关信号等)。我应该如何标准化这些输入?所有输入都属于不同的类别,因此它们具有不同的范围。一个范围从 0,1,另一个范围从 -5 到 50,等等

我应该标准化整个矩阵吗?还是我应该将每组输入分别归一化?

注意:我通常使用 MATLAB 中的 mapminmax 函数进行归一化。

如果你想在每列中标准化的所有列的范围为 [0,1],你可以像这样使用 mapminmax(假设 A 作为二维输入数组) -

out = mapminmax(A.',0,1).'

您也可以使用 bsxfun 来获得相同的输出,就像这样 -

Aoffsetted = bsxfun(@minus,A,min(A,[],1))
out = bsxfun(@rdivide,Aoffsetted,max(Aoffsetted,[],1))

样本运行-

>> A
A =
     3     7     4     2     7
     1     3     4     5     7
     1     9     7     5     3
     8     1     8     6     7
>> mapminmax(A.',0,1).'
ans =
      0.28571         0.75            0            0            1
            0         0.25            0         0.75            1
            0            1         0.75         0.75            0
            1            0            1            1            1
>> Aoffsetted = bsxfun(@minus,A,min(A,[],1));
>> bsxfun(@rdivide,Aoffsetted,max(Aoffsetted,[],1))
ans =
      0.28571         0.75            0            0            1
            0         0.25            0         0.75            1
            0            1         0.75         0.75            0
            1            0            1            1            1

您应该单独规范化每个 vector/column 矩阵,它们代表不同的数据类型,不应混淆在一起。

例如,您可以转置矩阵,将 3 种不同的数据类型放在矩阵的行中而不是列中,并且仍然使用 mapminmax:

A = [0 0.1 -5; 0.2 0.3 50; 0.8 0.8 10; 0.7 0.9 20]; 
A =
         0    0.1000   -5.0000
    0.2000    0.3000   50.0000
    0.8000    0.8000   10.0000
    0.7000    0.9000   20.0000

B = mapminmax(A')
B =
   -1.0000   -0.5000    1.0000    0.7500
   -1.0000   -0.5000    0.7500    1.0000
   -1.0000    1.0000   -0.4545   -0.0909

您应该独立地规范化每个 特征

column 1 represents linear regression of the last n samples, column 2 represents the average of the last n samples, column 3 represents the local max values of a different time series but correlated signal, etc

我不能肯定你的具体问题,但一般来说,你应该独立地规范化每个功能。所以标准化第 1 列,然后是第 2 列等

Should I normalize the WHOLE matrix? Or should I normalize each set of inputs one by one individually?

我不确定你在这里的意思。什么是输入?如果您的意思是一个实例(矩阵的一行),那么不,您不应该单独规范化行,而是规范化列。

我不知道您将如何在 Matlab 中执行此操作,但我将您的问题更多地视为理论问题而不是实现问题。