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