2D矩阵中各列的最小 - 最大标准化

时间:2015-04-02 02:40:25

标签: matlab normalization

我有一个包含4列/属性和150行的数据集。我想使用min-max规范化来规范化这些数据。到目前为止,我的代码是:

minData=min(min(data1))
maxData=max(max(data1))
minmaxeddata=((data1-minData)./(maxData))

此处,minDatamaxData返回全局最小值和最大值。因此,此代码实际上对2D矩阵中的所有值应用最小 - 最大归一化,以使全局最小值为0,全局最大值为1.

但是,我想分别对每个执行相同的操作。具体而言,2D矩阵的每列应独立于其他列进行最小 - 最大归一化。

我尝试仅使用min(data1)max(data1),但收到的错误是 Matrix尺寸必须同意

但是,通过使用全局最小值和最大值,我获得了[0-1]范围内的值,并使用此规范化数据集进行了实验。我想知道我的结果是否有任何问题?我的理解也有问题吗?任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:4)

如果我理解正确,您希望规范化data1的每一列。此外,由于每列都是独立数据集,并且很可能具有不同的动态范围,因此可能不建议执行全局最小 - 最大操作。我建议你按照初步的想法逐一规范每一列。

如果您的错误消失,则无法使用data1减去min(data1),因为min(data1)会生成行向量而data1是矩阵。您正在使用向量减去矩阵,这就是您收到该错误的原因。

如果您想实现所要求的内容,请使用bsxfun广播该向量,并将其重复为data1行。因此:

mindata = min(data1);
maxdata = max(data1);
minmaxdata = bsxfun(@rdivide, bsxfun(@minus, data1, mindata), maxdata - mindata);

实施例

>> data1 = [5 9 9 9 3 3; 3 10 2 1 10 1; 2 4 4 6 5 5]

data1 =

 5     9     9     9     3     3
 3    10     2     1    10     1
 2     4     4     6     5     5

当我运行上面的规范化代码时,我得到:

minmaxdata =

    1.0000    0.8333    1.0000    1.0000         0    0.5000
    0.3333    1.0000         0         0    1.0000         0
         0         0    0.2857    0.6250    0.2857    1.0000