我有两个功能
m1 = f1(w, s)
m2 = f2(w, s)
f1() 和 f2() 都是黑盒。给定 w 和 s,我可以得到 m1 和 m2。
现在,我需要设计或找到一个函数 g,这样
m2' = g(m1)
此外,必须最小化 m2 和 m2' 之间的差异。
w 和 s 都是随机过程。
我怎样才能找到这样的功能g()
?这属于什么知识领域?
我有两个功能
m1 = f1(w, s)
m2 = f2(w, s)
f1() 和 f2() 都是黑盒。给定 w 和 s,我可以得到 m1 和 m2。
现在,我需要设计或找到一个函数 g,这样
m2' = g(m1)
此外,必须最小化 m2 和 m2' 之间的差异。
w 和 s 都是随机过程。
我怎样才能找到这样的功能g()
?这属于什么知识领域?
假设您可以根据需要多次调用 f1,f2 - 这可以使用回归来解决。
(w_1,s_1,m2_1),...,(w_n,s_n,m2_n)
.(m1_1,m2_1),...,(m1_n,m2_n)
。(1,m1_1,m1_1^2,m1_1^3,m2_1), ...
很容易将其推广到任何阶的多项式或任何其他集合基函数。但是,请注意,对于某些函数,这可能无法计算找到合适的模型,因为当您将维度从 2 (w,s) 减少到 1 (m1) 时会丢失数据。
Matlab代码快照(功能选择不佳):
%example functions
f = @(w,s) w.^2 + s.^3 -1;
g = @(w,s) s.^2 - w + 2;
%random points for sampling
w = rand(1,100);
s = rand(1,100);
%the data
m1 = f(w,s)';
m2 = g(w,s)';
%changing dimension:
d = 5;
points = size(m1,1);
A = ones(points,d);
for jj=1:d
A(:,jj) = (m1.^(jj-1))';
end
%OLS:
theta = pinv(A'*A)*A'*m2;
%new point:
w = rand(1,1);
s = rand(1,1);
m1 = f(w,s);
%estimate the new point:
A = ones(1,d);
for jj=1:d
A(:,jj) = (m1.^(jj-1))';
end
%the estimation:
estimated = A*theta
%the real value:
g(w,s)
这类问题在统计或逆问题等领域进行了研究。这是从理论上解决问题的一种方法(从逆问题的角度来看):
首先,很明显,在一般情况下,函数 g 可能不存在。但是,假设您(假设)对 w 和 s 的统计有所了解,您可以(尝试)计算的是后验概率密度p(m2|m1),然后可以使用它来计算 m2 的估计量例如,给定 m1,最大后验估计。
后验密度可以使用贝叶斯公式计算:
p(m2|m1) = (\int p(m1,m2|w,s)p(w,s) dw ds) / (\int p(m1|w,s) dw ds)
在这种情况下,这可能(理论上)难以应用,因为一些涉及的边际概率密度是奇异的。进行数值计算的最佳方法取决于您可以对 w 和 s 的统计(例如,高斯)和函数 f1、f2(例如,平滑)进行的额外假设。没有银弹。
amit 的 OLS 解决方案可能是一个很好的起点。只要确保从 w 和 s 的正确分布中抽样。