快捷搜索:  汽车  科技

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)的各列的均值为0,标准差为1。为标准差。经过变换后,矩阵 标准变换后的观测值矩阵为其中为变量 Xj 的观测值的平均值;sij 为变量 Xj 的观测值的方差;

1. 数据的标准化变换

对于多元数据,当各变量的量纲和数量级不一致时,往往需要对数据进行变换处理,以消除量纲和数量级的限制,以便进行后续的统计分析。常见的数据变换方法有两种:标准化变换和极差归一化变换

1.1 标准化变换公式

设p维向量X=(X1,X2,....... Xp)的观测值矩阵为

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(1)

标准变换后的观测值矩阵为

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(2)

其中

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(3)

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(4)

为变量 Xj 的观测值的平均值;sij 为变量 Xj 的观测值的方差;

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(5)

为标准差。经过变换后,矩阵

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(6)

的各列的均值为0,标准差为1。

1.2 标准化变换的MATLAB实现

MATLAB统计工具箱中提供了zscore函数,用来作数据的标准化变换,其调用格式如下:

(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,即:

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(7)

zscore(X,0)等价于zscore(X)。

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

用flag参数指定标准差的计算公公式,若flag=0,

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(8)

;若flag=1,

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(9)

参数dim指定沿X的哪个维度进行标准化变换,例如dim=1,表示对X的各列进行标准化变换(默认情况);dim=2,表示对X的各行进行标准化变换。

例:用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

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(10)

极差归一化变换后的矩阵为

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(11)

其中:

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(12)

这里,min为变量 Xj 的观测值的最小值,max-min为变量 Xj 的观测值的极差。通过极差归一化变换后,矩阵

matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)(13)

的每个元素的取值都在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

猜您喜欢: