【问题标题】:Normalization or Modifying data to specific range which is better?规范化或将数据修改到特定范围哪个更好?
【发布时间】:2016-12-24 10:53:26
【问题描述】:

我有 180 个元素的列向量,用于将其作为特征应用于我阅读的任何模式识别算法,因为我们需要对向量进行归一化。 向量的最大值和最小值分别为 19.04881 和 8.4015。 首先,我使用了 matlab 内置函数normc(vector),当我检查最大值和最小值时,我分别获得了 0.0693 和 0.0306。 其次,我使用normalised_vector = (vector-min(vector))./max(vector) 将值标准化为0 和1 的范围,其中我获得的最大值和最小值分别为0.5589 和0。

当在 matlab 中使用 normc 函数的描述时,它被描述为给定矩阵的归一化。但是其他例子给了我第二种方法。 在这两种方式中,归一化值是完全不同的,当应用我的算法使用这些值时,结果是完全不同的。 当我有负值时,这两种方法都不起作用。

哪种数据规范化方式是正确的方式?还是我的理解有误? 或者我在这里遗漏了一些概念? 我是在比较两种不相关的方法吗? 请建议!

【问题讨论】:

  • “正确”的方式取决于您对数据进行规范化的目的。

标签: algorithm matlab vector


【解决方案1】:

正如@excaza 提到的,规范化对于您的应用程序可能具有不同的含义。 如果归一化是指re-scalingma​​pping,当您归一化到[0 1] 范围时,最小值和最大值将重新缩放到01 分别。所以你提到的第二种方法实际上是从一个范围映射到另一个范围,使用最小值和最大值以及线性缩放。

要将[a b] 范围内的向量映射到[0 1] 范围内,您可以遵循以下公式:

v2 = (v1 – a) / (b-a);

例如在 MATLAB 中:

V = 10*rand(10,1)+2;
Vscaled = (V-min(V))/(max(V)-min(V))

一般来说,要从[a b] 范围映射到[c d] 范围,请使用以下公式:

v2 = [  (c+d) + (d-c)* [(2*v1 – (a+b)) / (b-a)]  ] / 2

您也可以write a function 进行这种缩放。

【讨论】:

  • 感谢 NKN 的提示。我只是重新缩放。我使用了“mat2gray(vector)”来重新调整我的值。当我想在不同范围内重新缩放时,您提供的链接很有用。
  • 您似乎已链接到您自己的网站/您所属的网站。如果这样做,您必须在您的帖子中披露这是您的网站。如果您不披露从属关系,则将其视为垃圾邮件。请参阅:What signifies "Good" self promotion?the help center on self-promotion。披露必须是明确的,但不需要是正式的。如果是您自己的个人内容,则可以是“在我的网站上……”、“在我的博客上……”等。请edit您的帖子包含从属关系的披露。跨度>
猜你喜欢
  • 2011-07-20
  • 2011-06-08
  • 2013-08-13
  • 2022-01-21
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
相关资源
最近更新 更多