将标准化数据的曲线拟合结果归一化

时间:2013-11-06 12:56:26

标签: matlab normalization curve-fitting denormalization

我在 Matlab 中使用lsqvurcefit拟合指数衰减函数。要做到这一点,我首先normalize我的数据,因为它们有几个数量级。但是我不确定如何对我的拟合参数进行反规范化。

我的拟合模型是s = O + A * exp(-t/T),其中t和s是已知的,t是10 ^ -3的数量级,s是10 ^ 5的数量级。所以我从它们中减去它们的平均值并将它们除以它们的标准偏差。我的目标是找到最佳的A,O和T,在给定的时间t将导致最接近s。但是我不知道如何对我产生的A O和T进行非规范化。

有人可能知道怎么做吗?我只是在SO上发现this关于规范化的问题,但并没有真正解决同样的问题。

1 个答案:

答案 0 :(得分:2)

规范化时,必须记录每个特征的均值和标准差。然后,您可以轻松地使用这些值进行非规范化。

e.g。

A = [1 4 7 2 9]';
B = 100 475 989 177 399]';

所以你可以马上正常化:

An = (A - mean(A)) / std(A)

然后你无法回到原来的A.所以先保存手段和标准。

Am = mean(A); Bm = mean(B);
As = std(A);  Bs = std(B);
An = (A - Am)/As;
Bn = (B - Bm)/Bs;

现在做你想要的任何处理,然后去反规范化:

Ad = An*As + Am;
Bd = Bn*Bs + Bm;

我确信你可以看到,如果你有很多功能,那将是一个问题(即你必须为每个功能键入代码,这是一个任务!)所以我们假设您的数据被安排为矩阵,data,其中每个样本都是一行,每列都是一个特征。现在你可以这样做:

data = [A, B]

means = mean(data);
stds = std(data);

datanorm = bsxfun(@rdivide, bsxfun(@minus, data, means), stds);

%// Do processing on datanorm

datadenorm = bsxfun(@plus, bsxfun(@times, datanorm, stds), means);

修改

使用标准化AO拟合模型参数(Ttf)之后,您的模型将支持标准化输入和产生标准化输出。因此,要使用它,您应首先规范化 t,然后 denormalize f

通过在规范化的新f上运行模型来查找新的t。因此f(tn) tn = (t - tm)/tstm是您的训练(或拟合)t设置和ts标准的平均值。然后为了获得正确的幅度f,你必须仅对f进行非规范化,因此完整的解决方案将是

 f(tn)*fs + fm

因此,您需要做的就是保存您用于标准化的平均值和标准值。