2015-04-02 106 views
2

我有一個包含4列/屬性和150行的數據集。我想用min-max標準化來標準化這些數據。到目前爲止,我的代碼是:2D矩陣中單個列的最小 - 最大規範化

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

這裏,minDatamaxData返回全球最小和最大值。因此,此代碼實際上應用了二維矩陣中所有值的最小 - 最大值歸一化,以便全局最小值爲0且全局最大值爲1.

但是,我想對每個列執行相同的操作單獨使用。具體而言,2D矩陣的每列應該是獨立於其他列的min-max標準化。

我試着用只用min(data1)max(data1),但得到的錯誤說,矩陣尺寸必須同意

但是,通過使用全局最小值和最大值,我得到了[0-1]範圍內的值,並使用此歸一化數據集進行了實驗。我想知道我的結果是否有問題?我的理解也有問題嗎?任何指導將不勝感激。

回答

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

@ rayryeng:你的回答是真的helpful..and我會想知道如何修改相同的代碼,如果我的數據集包含像 (8.1212879 71003636e-12,-0.01595515444407518) 我想獲得整個值而不是四捨五入...你能建議任何想法嗎? – puja 2015-04-03 05:49:02

+0

你是什麼意思「沒有圓整的整體價值」?你的預期結果是什麼? – rayryeng 2015-04-03 06:03:40

+0

我的意思是,我需要歸一化後數據集中的每個值,因爲它們是...如果數據集中的值類似於8.121287971003636e-12,我想對其進行歸一化並得到歸一化的值。 ies,不是四捨五入到一些小數點).hope你明白了我的意思。 – puja 2015-04-03 06:42:07