MATLAB數據的標準變換與極差歸一化變換

1. 數據的標準化變換

對於多元數據,當各變數的量綱和數量級不一致時,往往需要對數據進行變換處理,以消除量綱和數量級的限制,以便進行後續的統計分析。常見的數據變換方法有兩種:標準化變換和極差歸一化變換

1.1 標準化變換公式

設p維向量X=(X1,X2,.......,Xp)的觀測值矩陣為

標準變換后的觀測值矩陣為

其中

其中,

為變數 Xj 的觀測值的平均值;sij 為變數 Xj 的觀測值的方差;

為標準差。經過變換后,矩陣

的各列的均值為0,標準差為1。

1.2 標準化變換的MATLAB實現

MATLAB統計工具箱中提供了zscore函數,用來作數據的標準化變換,其調用格式如下:

Advertisements

(1)Z=zscore(X)

對X進行標準化變換

(2)[Z,mu,sigma]=zscore(X)

返回X的均值mu=mean(X)和標準差sigma=std(X)

(3)[.....]=zscore(X,1)

計算標準差時初一樣本容量n而不是n-1,即:

zscore(X,0)等價於zscore(X)。

(4)[......]=zscore(X,flag,dim)

用flag參數指定標準差的計算公公式,若flag=0,

;若flag=1,

參數dim指定沿X的哪個維度進行標準化變換,例如dim=1,表示對X的各列進行標準化變換(默認情況);dim=2,表示對X的各行進行標準化變換。

Advertisements

例:用rand函數產生一個隨機矩陣,調用zscore函數對其按列進行標準化變換。

rand('seed',1); %設置隨機數生成器的初始種子為1

%調用rand函數參數一個5行4列的隨機矩陣,每列服從不同的隨機分佈

x=[rand(5,1),5*rand(5,1),10*rand(5,1),500*rand(5,1)]

%調用zscore函數對x進行標準化變換(按列標準化)

%返回變換后矩陣xz,以及矩陣x各列的均值構成的向量mu,和各列的標準差構成的向量sigma

[xz,mu,sigma]=zscore(x)

xzmean=mean(xz) %求標準化后矩陣xz的各列的均值

xzstd=std(xz) %求標準化后矩陣xz的各列的標準差

% ---對x的各行進行標準化變換

% 調用zscore函數對x進行標準化變換(按行標準化)

% 返回變換后矩陣xz,以及矩陣x各行的均值構成的向量mu,和各行的標準差構成的向量sigma

% [xz,mu,sigma]=zscore(x,0,2)

% [xz,mu,sigma]=zscore(x,0,2)

% xzmean=mean(xz,2) %求標準化后矩陣xz的各行的均值

% xzstd=std(xz,0,2) %求標準化后矩陣xz的各列的標準差

x =

0.5129 3.5462 1.9215 215.9352

0.4605 0.5798 4.7136 223.0174

0.3504 0.3904 1.4492 254.1658

0.0950 1.8463 7.1784 264.0439

0.4337 0.1681 6.6171 286.4390

xz =

0.8641 1.5868 -0.9347 -1.1208

0.5460 -0.5145 0.1286 -0.8787

-0.1220 -0.6487 -1.1146 0.1862

-1.6714 0.3826 1.0672 0.5239

0.3833 -0.8062 0.8535 1.2895

mu =

0.3705 1.3062 4.3760 248.7203

sigma =

0.1648 1.4116 2.6259 29.2518

xzmean =

1.0e-15 *

0.0222 -0.0666 0.0666 -0.5773

xzstd =

1.0000 1.0000 1.0000 1.0000

2. 數據的極差歸一化變換

對於觀測值矩陣X

極差歸一化變換后的矩陣為

其中:

這裡,min為變數 Xj 的觀測值的最小值,max-min為變數 Xj 的觀測值的極差。通過極差歸一化變換后,矩陣

的每個元素的取值都在0-1之間。

2.2 極差歸一化變換的MATLAB實現

MATLAB神經網路工具箱中提供了mapminmax函數,用來做數據的映射變換,其常用的調用格式如下:

[Y,PS]=mapminmax(X,YMIN,YMAX) %對矩陣X按行左映射變換

X =manminmax('reverse',Y,PS) %對矩陣Y按行進行逆映射變換

mapminmax函數能將矩陣X中的每行數據均映射到區間[YMIN,YMAX]內,每行最小值映射為YMIN,最大值映射為YMAX。mapminmax函數還能對變換后矩陣Y作逆映射變換,恢復為原始數據矩陣X。

例:調用rand函數產生一個隨機矩陣,調用mapminmax函數對其按列進行極差歸一化變換,然後做你變換

rand('seed',1); %設置隨機數生成器的初始種子為1

%調用rand函數產生一個5行4列的隨機矩陣,每列服從不同的均勻分佈

x=[rand(5,1),5*rand(5,1),10*rand(5,1),500*rand(5,1)]

%調用mapminmax函數對裝置后的x按行進行極差歸一化變換

[y,ps]=mapminmax(x',0,1)

% ps.xmax %查看ps

y' %變換后的矩陣

x0=mapminmax('reverse',y,ps)

x0'

x =

0.5129 3.5462 1.9215 215.9352

0.4605 0.5798 4.7136 223.0174

0.3504 0.3904 1.4492 254.1658

0.0950 1.8463 7.1784 264.0439

0.4337 0.1681 6.6171 286.4390

y =

1.0000 0.8745 0.6111 0 0.8104

1.0000 0.1219 0.0658 0.4968 0

0.0824 0.5698 0 1.0000 0.9020

0 0.1005 0.5422 0.6824 1.0000

ps =

name: 'mapminmax'

xrows: 4

xmax: [4x1 double]

xmin: [4x1 double]

xrange: [4x1 double]

yrows: 4

ymax: 1

ymin: 0

yrange: 1

no_change: 0

gain: [4x1 double]

xoffset: [4x1 double]

ans =

1.0000 1.0000 0.0824 0

0.8745 0.1219 0.5698 0.1005

0.6111 0.0658 0 0.5422

0 0.4968 1.0000 0.6824

0.8104 0 0.9020 1.0000

x0 =

0.5129 0.4605 0.3504 0.0950 0.4337

3.5462 0.5798 0.3904 1.8463 0.1681

1.9215 4.7136 1.4492 7.1784 6.6171

215.9352 223.0174 254.1658 264.0439 286.4390

ans =

0.5129 3.5462 1.9215 215.9352

0.4605 0.5798 4.7136 223.0174

0.3504 0.3904 1.4492 254.1658

0.0950 1.8463 7.1784 264.0439

0.4337 0.1681 6.6171 286.4390

Advertisements

你可能會喜歡