多参数模型优化

时间:2016-04-21 09:35:50

标签: matlab optimization multiparameter

我有一个小模型,我用它来估计一个真菌群体在环境条件下的生长。实际上,该模型是以下形式的MATLAB函数:

growth=myfunction(envdata,params)

其中growth是我的真菌生长多少(呃!),envdata是一个环境变量矩阵(每个时间步长一行,每列是一个不同的变量,如温度,湿度等等等)和params是我的模型的参数。后者是我想要优化的那些,它们包括诸如(未知的)初始真菌群体,可以存在一定时间的最大真菌等等,等等。

与此同时,我在实验室测量了一个增长矢量(我的观察结果),我的目标是通过改变输入参数使我的模型适合观察。

我的自然答案是使用诸如fminsearch之类的东西,但它没有选择使用观察向量作为最低要求。或者我错了吗?

1 个答案:

答案 0 :(得分:1)

您希望尽可能接近观察值与模型拟合增长率之间的差异,但正如您所指出的,fminsearch不允许您使用目标向量。

解决方案是定义一个包装函数,用于定义您尝试最小化的事物(通常称为 loss )。一个流行的损失是均方误差,

  

MSE(x,y)=Σ(x - y) 2

所以你可以定义,例如,

function loss = objectiveFun(observations, envdata, params)

    growth = myfunction(envdata, params);
    loss = sum((observation - growth).^2); // or your favorite loss function

end

然后运行

paramsInit = 0; // whatever initial value you have for params

paramsOpt = fminsearch(@(x) objectiveFun(observations, envdata, x), paramsInit);