前馈神经网络输入的归一化
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 中执行此操作,但我将您的问题更多地视为理论问题而不是实现问题。
假设我有一个时间序列信号的不同特征的 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 中执行此操作,但我将您的问题更多地视为理论问题而不是实现问题。