Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何找到一个可以通过编程近似于另一个blackbox函数的函数?_Algorithm_Math_Estimation_Black Box_Stochastic Process - Fatal编程技术网

Algorithm 如何找到一个可以通过编程近似于另一个blackbox函数的函数?

Algorithm 如何找到一个可以通过编程近似于另一个blackbox函数的函数?,algorithm,math,estimation,black-box,stochastic-process,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()?这属于什么知识领域 假设您可以调用f1、f2任意次数-这可以使用回归来解决 设置训练集:(w_1,s_1,m2_1),…,(w_n,s_n,m2_n) 将集合“转换”为g的参数: (m1_1,m2_

我有两个功能

  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)
  • 将集合“转换”为g的参数:
    (m1_1,m2_1),…,(m1_n,m2_n)
  • 创建“基本函数”。例如,对于 “修改”训练集的3级多项式将
    (1,m1_1,m1_1^2,m1_1^3,m2_1),…
    很容易将其推广到任何 多项式或任何其他集合基函数的阶数
  • 现在你有了一个问题,可以通过使用
但是,请注意,对于某些函数,这可能无法计算并找到一个好的模型进行拟合,因为将维数从2(w,s)减少到1(m1)时会丢失数据

Matlab代码捕捉(函数选择不当):


假设您可以调用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),…
    很容易将其推广到任何 多项式或任何其他集合基函数的阶数
  • 现在你有了一个问题,可以通过使用
但是,请注意,对于某些函数,这可能无法计算并找到一个好的模型进行拟合,因为将维数从2(w,s)减少到1(m1)时会丢失数据

Matlab代码捕捉(函数选择不当):


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

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

后验密度可使用Bayes公式计算:

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的正确分布中取样即可。

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

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

后验密度可使用Bayes公式计算:

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的正确分布中取样即可。

我认为这属于on。你有例子吗?你能从点(w,s)的抽样中产生成对(m1,m2)的散点图吗?如果该图不接近曲线,那么就没有希望找到g。如果该图看起来不像一个函数的图,例如,在同一个m1上有多个m2值,那么找到g也很复杂。如果它看起来不错,多项式回归可能已经给出了足够的g。听起来与回归问题有关。你能多次调用f1、f2吗?这个问题似乎离题了,因为它是关于数学的,而不是关于编程。仅仅因为程序可以解决某个问题,并不意味着它就是一个编程问题。你问的是解决这个问题所需的数学背景,而不是关于实现的任何具体编程问题。我相信这属于。你有例子吗?你能从点(w,s)的抽样中产生成对(m1,m2)的散点图吗?如果该图不接近曲线,那么就没有希望找到g。如果该图看起来不像一个函数的图,例如,在同一个m1上有多个m2值,那么找到g也很复杂。如果它看起来不错,多项式回归可能已经给出了足够的g。听起来与回归问题有关。你能多次调用f1,f2吗?这个问题似乎离题了,因为它是关于数学的,而不是关于编程的。只是因为有些事情是可以通过一个函数来解决的
%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)