2

lsqvurcefitMatlab中拟合指数衰减函数。为此,我首先对我的数据进行标准化,因为它们相差几个数量级。但是我不确定如何对我的拟合参数进行非规范化。

我的拟合模型是s = O + A * exp(-t/T)已知 t 和 s,t 大约为 10^-3,s 大约为 10^5。所以我从它们中减去它们的平均值,然后除以它们的标准差。我的目标是找到在给定时间 t 最接近 s 的最佳 A、O 和 T。但是我不知道如何对生成的 AO 和 T 进行非规范化。

可能有人知道如何做到这一点?我只在 SO 上找到了这个关于标准化的问题,但并没有真正解决同样的问题。

4

1 回答 1

2

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

例如

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)后, 您的模型将期望归一化输入并产生归一化输出。所以要使用它,你应该先normalize然后denormalizeTtf t f

f因此,通过在规范化的 new 上运行模型来找到新的t。那么你的训练(或拟合)集和标准的平均值f(tn)在哪里?然后要获得正确的幅度 f,您必须仅对 f 进行非规范化,因此完整的解决方案是tn = (t - tm)/tstmtts

 f(tn)*fs + fm

所以再一次,你需要做的就是保存你用来标准化的平均值和标准。

于 2013-11-06T12:58:58.180 回答