在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);
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是时间序列的数组(1x12 double)。 z的公式基本上是: z =(x - mean)/ stdDev 假设x最初设置为:
x = 第1列至第5列&gt; 40.466666670000002 43.538461540000000 40.466666670000002 41.846153850000000 46.266666669999999 第6至10列&gt; 68.000000000000000 87.200000000000003 42.933333330000004 41.071428570000002 41.428571429999998 第11至12列>&gt; 83.200000000000003 96.076923080000000
我跑完后
x=zscore(x);
如下所示:
x = 第1列至第5列&gt; -0.730346157143482 -0.586298957286754 -0.730346157143482 -0.665657180852154 -0.458363881462091 第6至10列&gt; 0.560788093923360 1.461143213420378 -0.614675534465169 -0.701986757521516 -0.685239080313558 第11至12列>&gt; 1.273569230191833 1.877413168652630
我需要应用它的反函数。我应该如何在Matlab上实现代码。
答案 0 :(得分:1)
要计算逆,您需要知道原始x的平均值和标准差,因为有很多输入值可能导致相同的z得分。我认为你已经意识到z分数的均值和标准偏差总是分别为0和1,因为z分数的定义并没有给出有用的信息。
如果您知道原始均值和标准差。您可以将原始x简单地计算为 x = std(x)* z + mean(x)。但是,如果不这样做,问题就没有明确定义,也无法解决。
例如,如果您为所有原始数据添加100,则z分数不变。没有办法区分哪个x值仅与z得分正确。如果将原始数据乘以常数,则相同。