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