多参数模型优化
Multiparametric model optimization
我有一个小模型,可以用来估计给定环境条件下真菌种群的增长。该模型实际上是以下形式的 MATLAB 函数:
growth=myfunction(envdata,params)
其中 growth
是我的真菌生长量(duh!),envdata
是环境变量矩阵(每个时间步长一行,每列是不同的变量,例如温度、湿度等等等等等等)和params
是我模型的参数。后者是我想要优化的,它们包括诸如(未知的)初始真菌种群、在特定时间可以存在的最大真菌数等等。
同时,我在实验室中测量了一个增长矢量(我的观察结果),我的 objective 现在通过改变输入参数来使我的模型适应观察结果。
我的自然答案是使用诸如 fminsearch
之类的东西,但它没有选择至少使用观察向量的选项。还是我错了?
您希望尽可能接近地拟合您的观察值与模型的拟合增长率之间的差异,但正如您所指出的,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);
我有一个小模型,可以用来估计给定环境条件下真菌种群的增长。该模型实际上是以下形式的 MATLAB 函数:
growth=myfunction(envdata,params)
其中 growth
是我的真菌生长量(duh!),envdata
是环境变量矩阵(每个时间步长一行,每列是不同的变量,例如温度、湿度等等等等等等)和params
是我模型的参数。后者是我想要优化的,它们包括诸如(未知的)初始真菌种群、在特定时间可以存在的最大真菌数等等。
同时,我在实验室中测量了一个增长矢量(我的观察结果),我的 objective 现在通过改变输入参数来使我的模型适应观察结果。
我的自然答案是使用诸如 fminsearch
之类的东西,但它没有选择至少使用观察向量的选项。还是我错了?
您希望尽可能接近地拟合您的观察值与模型的拟合增长率之间的差异,但正如您所指出的,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);