Matlab中Z-归一化(Z-score)函数的求逆
在Matlab R2014a中,我有信心使用zscore(x)函数Matlab中Z-归一化(Z-score)函数的求逆,matlab,inverse,Matlab,Inverse,在Matlab R2014a中,我有信心使用zscore(x)函数 function [z,mu,sigma] = zscore(x,flag,dim) if isequal(x,[]), z = []; return; end if nargin < 2 flag = 0; end if nargin < 3 % Figure out which dimension to work along. dim = find(size(x) ~= 1, 1);
function [z,mu,sigma] = zscore(x,flag,dim)
if isequal(x,[]), z = []; return; end
if nargin < 2
flag = 0;
end
if nargin < 3
% Figure out which dimension to work along.
dim = find(size(x) ~= 1, 1);
if isempty(dim), dim = 1; end
end
% Compute X's mean and sd, and standardize it
mu = mean(x,dim);
sigma = std(x,flag,dim);
sigma0 = sigma;
sigma0(sigma0==0) = 1;
z = bsxfun(@minus,x, mu);
z = bsxfun(@rdivide, z, sigma0);
具体如下:
x=
第1列至第5列>>
-0.730346157143482 -0.586298957286754 -0.730346157143482 -0.665657180852154 -0.458363881462091
第6列至第10列>>
0.560788093923360 1.461143213420378 -0.614675534465169 -0.701986757521516 -0.685239080313558
第11列至第12列>>
1.273569230191833 1.877413168652630
我需要应用它的反函数。我应该如何在Matlab上实现代码。要计算逆,您需要知道原始x的平均值和标准偏差,因为有许多输入值可能会导致相同的z分数。我想你已经意识到,根据z分数的定义,z分数的平均值和标准差总是分别为0和1,因此没有给出有用的信息 如果你知道原始平均值和标准偏差。您可以简单地将原始x计算为x=std(x)*z+mean(x)。但是,如果您不这样做,那么问题就没有很好的定义,无法解决
例如,如果将100添加到所有原始数据中,z分数将保持不变。没有办法单独从z分数中区分哪个x值是正确的。如果将原始数据乘以常数,则相同 你是说如何从
z
中查找x
?我不明白,哈哈对不起,不用担心。。。从数学上讲,我想要x=z(StdDev)+mean(this)函数代码,因为我已经知道z=(x-mean)/StdDev(that)是zscore函数OK,那么它不是简单的z=(x-mean(x,dim))./sigma0
?它没有给我正确的结果mean(x,2)
给出:-2.405483220021172e-16,而sigma0
返回1Hanks,我确实需要知道原始x的平均值和sigma来计算zscore的反函数。对于这些未知数,我将把另一个数组的std偏差和平均值应用到我原来的x的Z核上。
x=zscore(x);