2

我有两个功能

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

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

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

   m2' = g(m1)

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

w 和 s 都是随机过程。

我怎样才能找到这样的功能g()?这属于什么知识领域?

4

2 回答 2

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), ...很容易将其推广到任何阶的多项式或任何其他集合基函数。
  • 现在你有一个问题,可以通过使用普通最小二乘法 (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)
于 2014-02-13T16:12:29.427 回答
1

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

首先,很明显,在一般情况下,函数 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 的正确分布中抽样。

于 2014-02-13T17:07:54.260 回答