我注意到可以使用最小值、最大值和/或使用表达式来约束 LMFIT 中的参数。我想知道是否有一种方法可以使用表达式来约束参数以遵循由均值和标准差定义的正态分布。例如,我的参数之一介于 -3000 和 5000 之间,如果我将它们指定为最小值和最大值,优化器会认为它们同样可能(均匀),但我希望它考虑远离平均值的值不太可能(即普通的)。谢谢你。
问问题
226 次
1 回答
1
指定最小值和最大值实际上并不断言这些界限之间的所有值的概率相等。它确实断言边界外的概率为零。
使用 lmfit 进行的非线性最小二乘拟合旨在找到所有参数的最高概率值,它不会将所有值视为同等概率。您为每个参数提供起始值,该方法使用计算的梯度(可以是解析的,但通常是数字的)来找到优化每个参数值的方向。
但是,如果我了解您的目标,那么您并不是真的想要“硬墙约束”,而是希望在参数与预期值相差太远时惩罚拟合。Lmfit 没有内置方法来轻松启用此功能,但可以在目标函数中添加此类惩罚。一种方法是添加“惩罚”值作为要最小化的数组中的添加元素。也就是说,您可以扩展残差。由于首先对残差进行“最小二乘”高斯分布,因此您可以简单地附加 ( np.concatenate
) 项:
(current_parameter_value - expected_value)/sigma_expected_value
到残。在某种意义上,这类似于正则化,有时被称为限制,以允许但惩罚远离预期值的参数值。
希望这是有道理的!
于 2018-03-01T03:50:22.710 回答