matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)
matlab怎么把数据转换成数值型(MATLAB数据的标准变换与极差归一化变换)的各列的均值为0,标准差为1。为标准差。经过变换后,矩阵 标准变换后的观测值矩阵为其中为变量 Xj 的观测值的平均值;sij 为变量 Xj 的观测值的方差;
1. 数据的标准化变换
对于多元数据,当各变量的量纲和数量级不一致时,往往需要对数据进行变换处理,以消除量纲和数量级的限制,以便进行后续的统计分析。常见的数据变换方法有两种:标准化变换和极差归一化变换
1.1 标准化变换公式
设p维向量X=(X1,X2,....... Xp)的观测值矩阵为
标准变换后的观测值矩阵为
其中
为变量 Xj 的观测值的平均值;sij 为变量 Xj 的观测值的方差;
为标准差。经过变换后,矩阵
的各列的均值为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,即:
zscore(X,0)等价于zscore(X)。
(4)[......]=zscore(X,flag,dim)
用flag参数指定标准差的计算公公式,若flag=0,
;若flag=1,
。
参数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
极差归一化变换后的矩阵为
其中:
这里,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