如何找到一个能够以编程方式逼近另一个黑盒功能的功能?

时间:2014-02-13 15:10:38

标签: algorithm math estimation black-box stochastic-process

我有两个功能

  m1 = f1(w, s)
  m2 = f2(w, s)

f1()和f2()都是黑盒子。给定w和s,我可以得到m1和m2。

现在,我需要设计或找到一个函数g,例如

   m2' = g(m1)

此外,m2和m2'之间的差异必须最小化。

w和s都是随机过程。

如何找到这样的函数g()?这属于哪个知识领域?

2 个答案:

答案 0 :(得分:3)

假设您可以根据需要多次调用f1,f2 - 这可以使用回归来解决。

  • 设置训练集:(w_1,s_1,m2_1),...,(w_n,s_n,m2_n)
  • '将'转换'为g的参数: (m1_1,m2_1),...,(m1_n,m2_n)
  • 创建“基本功能”。例如,对于基本函数 “修改后的”训练集将达到3级的多项式 (1,m1_1,m1_1^2,m1_1^3,m2_1), ...很容易将它概括为任何 多项式或任何其他设定基函数。
  • 现在您遇到了一个问题,linear regression使用ordinary least squares (OLS)
  • 可以解决这个问题

但是,请注意,对于某些函数,计算可能无法找到合适的好模型,因为当您将维度从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)

答案 1 :(得分:1)

在统计或反问题等领域研究了这类问题。这是从理论上解决问题的一种方法(从反问题的角度来看):

首先,很明显,在一般情况下,函数g可能不存在。但是,你可以(尝试)计算,假设你(假设)了解w和s的统计信息,那么后验概率密度 p(m2 | m1),然后可以用于计算给定m1的m2的估计量,例如最大后验估计值。

可以使用贝叶斯公式计算后验密度:

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的正确分布中进行采样。