2016-08-17 33 views
0

我有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函數的描述時,它將描述爲給定矩陣的歸一化。但是其他例子給了我第二種方法。 從這兩種方式中,歸一化的值是完全不同的,當使用這些值應用我的算法時,結果是完全不同的。 這兩種方法都不起作用,當我有負值的時候。

哪種數據規範化方式是正確的方式?或者我的理解錯了? 或者我在這裏錯過了一些概念? 我在比較兩種不相關的方法嗎? 請建議!

+0

「正確」的方式取決於您對歸檔數據的目的。 – excaza

回答

2

由於@excaza提到的標準化可以在您的應用程序有不同的含義。 如果通過正常化你的意思重新縮放映射,當標準化爲範圍[0 1]然後最小值和最大值將分別重新縮放到01。因此,您提到的第二種方法實際上是使用最小值和最大值以及線性縮放從一個範圍映射到另一個範圍。

要在範圍映射向量範圍[0 1]可以按照以下公式:

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

例如在MATLAB:

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

一般來說,爲了從範圍映射到範圍[c d]請使用以下公式:

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

您也可以使用write a function進行這種縮放。

+0

謝謝NKN,提示。我只是重新縮放。我已經使用'mat2gray(vector)'來重新調整我的值。當我想要在不同範圍內重新調整比例時,您提供的鏈接非常有用。 – RDK