假设我有一个时间序列信号的不同特征的 mxn 矩阵(第 1 列代表最后 n 个样本的线性回归,第 2 列代表最后 n 个样本的平均值,第 3 列代表不同时间序列的局部最大值但相关信号等)。我应该如何规范这些输入?所有输入都属于不同的类别,因此它们具有不同的范围。一个范围从 0,1,另一个范围从 -5 到 50,依此类推。
我应该标准化整个矩阵吗?或者我应该分别对每组输入进行标准化吗?
注意:我通常使用 MATLAB 中的 mapminmax 函数进行标准化。
假设我有一个时间序列信号的不同特征的 mxn 矩阵(第 1 列代表最后 n 个样本的线性回归,第 2 列代表最后 n 个样本的平均值,第 3 列代表不同时间序列的局部最大值但相关信号等)。我应该如何规范这些输入?所有输入都属于不同的类别,因此它们具有不同的范围。一个范围从 0,1,另一个范围从 -5 到 50,依此类推。
我应该标准化整个矩阵吗?或者我应该分别对每组输入进行标准化吗?
注意:我通常使用 MATLAB 中的 mapminmax 函数进行标准化。
您应该独立地标准化每个特征。
第 1 列代表最后 n 个样本的线性回归,第 2 列代表最后 n 个样本的平均值,第 3 列代表不同时间序列但相关信号的局部最大值等
我不能肯定地说你的具体问题,但一般来说,你应该独立地规范化每个特征。所以规范化第 1 列,然后第 2 列等。
我应该标准化整个矩阵吗?或者我应该分别对每组输入进行标准化吗?
我不确定你在这里的意思。什么是输入?如果你的意思是一个实例(矩阵的一行),那么不,你不应该单独规范行,而是列。
我不知道您将如何在 Matlab 中执行此操作,但我将您的问题更多地视为理论问题而不是实现问题。
您应该单独规范化矩阵的每个向量/列,它们代表不同的数据类型,不应混淆在一起。
例如,您可以转置矩阵以在行中而不是在矩阵的列中包含 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
如果您希望[0,1]
在每列中标准化的所有列都有一个范围,您可以mapminmax
像这样使用(假设A
为 2D 输入数组) -
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