歸一化函式mapminmax的討論

2021-09-24 01:14:59 字數 2617 閱讀 2279

原文:

一、基本用法

[y,ps] = mapminmax(x,ymin,ymax)       % 這裡如果不指定 ymin,ymax,則ymin預設為-1,ymax預設為1。

mapminmax(data)                預設歸一化範圍為[-1,1],且對每一行做歸一化。一定記住是對行進行歸一化!!!

二、歸一化的討論

參考:[train_scale,test_scale,ps] = scaleforsvm(train_data,test_data,ymin,ymax)

輸入:train_data:訓練集

test_data:測試集

ymin:歸一化範圍下限(可不輸入,預設為0)

ymax:歸一化範圍上限(可不輸入,預設為1)

輸出:train_scale:歸一化後的訓練集

test_scale:歸一化後的測試集

ps:歸一化對映

測試**:

train_data = [1 12;3 4;7 8]

test_data = [9 10;6 2]

[train_scale,test_scale,ps] = scaleforsvm(train_data,test_data,0,1)

執行結果:

train_data =

1    12

3     4

7     8

test_data =

9    10

6     2

train_scale =

0    1.0000

0.2500    0.2000

0.7500    0.6000

test_scale =

1.0000    0.8000

0.6250         0

ps =

name: 'mapminmax'

xrows: 2

xmax: [2x1 double]

xmin: [2x1 double]

xrange: [2x1 double]

yrows: 2

ymax: 1

ymin: 0

yrange: 1

說明:歸一化並不是必須採用的預處理方法。但一旦採用了,這個步驟就十分重要,因為這是使用svm的第一步驟,原始資料從這裡將會被變化,若處理不當會使後面的分類或回歸效果不佳

原始資料到底該怎麼進行歸一化,我想到的是以下的幾個問題:

(1)是對每乙個樣本進行進行歸一化(按行歸一化)還是對每乙個維度進行歸一化(按列歸一化)?

(2)是將訓練集和測試集分別歸一化還是放在一起形成乙個大矩陣一起進行歸一化?

對於上面的我個人的理解和給出的解決辦法是:

(1)對每乙個維度進行歸一化

理由:對於每個樣本,由於它的每乙個維度的量綱不同,若對每乙個樣本進行歸一化且在量綱數量級差別懸殊時會使樣本中較低數量級的屬性變為0,會使原始資訊過多喪失。比如:

sample =

1    2    0.5    100000

5    7    0.4    200000

若按行對每乙個樣本進行[0,1]歸一化(按行歸一化),則結果為:

sample_scale =

0.0000    0.0000         0    1.0000

0.0000    0.0000         0    1.0000

你會看到由於數量級的差別,對於每一樣本的前三維的資料都被歸一化為0,這樣其實是不合理,會使原始資料的資訊過多丟失。但若採用對每一維度進行歸一化,就不會大範圍發生這種情況,因為對於同一維度,量綱級別是相同的。對每一維度進行[0,1]歸一化(按列歸一化),結果為:

sample_scale =

0     0     1     0

1     1     0     1

(2)將訓練集和測試集放在一起,一起進行歸一化。

理由:用測試**中的例子

train_data =

1    12

3     4

7     8

test_data =

9    10

6     2

若先將訓練集進行歸一化(按每一維度進行),然後把這個歸一化對映記錄下來,當有測試集時再用這個歸一化對映對測試集進行歸一化,對訓練集進行歸一化時對於第一維度歸一化對映記錄的最大值是7,這就接受乙個假設是所有資料的第一維度的最大值不能超過7,但我們看到新的測試集拿來的時候它的第一維度的值不一定非得小於7,測試資料中的測試集的第一維度的最大值為9>7。即若分別歸一化會產生這種不合理的現象。將訓練集和測試集放在一起歸一化就可以避免這種情況,統一歸一化時每一維度的最大值和最小值是從訓練集和測試集中尋找。

bp神經網路中,newff函式使用的資料m行n列,行代表資料屬性值,列代表資料樣本的個數。

libsvm中,各函式使用的矩陣m行n列比如880x6,行代表資料樣本的個數,列代表資料的屬性值。兩者正好相反。

---------------------

matlab歸一化函式,以及還原歸一化

2 只按行歸一化,如果是矩陣,則每行各自歸一化,如果需要對整個矩陣歸一化,用如下方法 flatteneddata originaldata 展開矩陣為一列,然後轉置為一行。mapminmax flatteneddata,0,1 歸一化。reshape size originaldata 還原為原始矩...

matlab premnmx歸一化函式的使用

matlab premnmx歸一化函式的使用 1 premnmx 預處理資料使資料的最小值和最大值分別為 1和1.pn,minp,maxp,tn,mint,maxt premnmx p,t premnmx p,t 輸入p r x q 矩陣 輸入向量,其中一列表示輸入變數 t s x q 矩陣 目標 ...

歸一化函式normalize詳解

歸一化就是要把需要處理的資料經過處理後 通過某種演算法 限制在你需要的一定範圍內。首先歸一化是為了後面資料處理的方便,其次是保證程式執行時收斂加快。歸一化的具體作用是歸納統一樣本的統計分布性。歸一化在0 1之間是統計的概率分布,歸一化在某個區間上是統計的座標分布。歸一化有同 一 統一和合一的意思。歸...