【问题标题】:Min-max normalization of individual columns in a 2D matrix二维矩阵中各个列的最小-最大归一化
【发布时间】:2015-06-06 21:20:09
【问题描述】:

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

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

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

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

我尝试只使用min(data1)max(data1),但收到错误提示矩阵尺寸必须一致

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

【问题讨论】:

    标签: matlab normalization


    【解决方案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);
    

    示例

    >> 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
    

    【讨论】:

    • @rayryeng:你的回答真的很有帮助。如果我的数据集包含像 (8.121287971003636e-12, -0.01595515444407518) 这样的值,我想知道如何修改相同的代码并且我想要在不四舍五入的情况下获得整个值...你能提出任何想法吗?
    • 你是什么意思“没有被四舍五入的整数”?您的预期结果是什么?
    • 我的意思是我需要标准化后数据集中的每个值,因为它们是..ies,如果数据集中的值类似于 8.121287971003636e-12 ,我想对其进行标准化并获得归一化值。(即,不四舍五入到小数点)。希望你明白我的意思..
    • 不,我没有。对不起。您能发布一个小的数值示例吗?...数据是什么,以及您期望它的样子。
    猜你喜欢
    • 2021-07-26
    • 2017-08-11
    • 2012-07-08
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    相关资源
    最近更新 更多