matlab - 二维矩阵中各列的最小-最大归一化

标签 matlab normalization

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

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

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

但是,我想对每个 分别执行相同的操作。具体来说,二维矩阵的每一列都应该独立于其他列进行最小-最大归一化。

我尝试仅使用 min(data1)max(data1),但出现错误提示 Matrix dimensions must agree .

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

最佳答案

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

根据你的错误,你不能用 min(data1) 减去 data1 因为 min(data1) 会产生一个行向量而 data1 是一个矩阵。您正在用一个向量减去一个矩阵,这就是您收到该错误的原因。

如果您想实现您的要求,请使用 bsxfun广播向量并在 data1 的行中重复它。因此:

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

对于更高版本的 MATLAB,广播是语言的内置功能,因此您可以简单地执行以下操作:

mindata = min(data1);
maxdata = max(data1);
minmaxdata = (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

关于matlab - 二维矩阵中各列的最小-最大归一化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29404157/

相关文章:

matlab - 删除 Matlab 图周围的边框

arrays - 如何重置 3 维矩阵的 'lower triangle'

MySQL - 分成更多表?

python - 将数组归一化为总和为 1.0 的两种方法

MATLAB:需要制作 4D 图(3D + Color/Color)

matlab - 访问 1x1 matlab 单元格的内容

algorithm - MATLAB程序执行需要1个多小时

python - 当系列数据不恒定时,为什么系列给我 NAN 的 zscore

perl - Unicode 规范化 - 文本文件中的文件名与文件系统上的文件名

r - 如何测试缺失值的多元正态性?