非线性性能你好,
我有一个经常使用非线性平台的客户。
他定义了一个包含 16 个参数的方程,并希望在相对大的数据(106300 行)上估计它们。 估计可能需要大约 3 个小时,这是相当长的时间。
他有一台 4 核计算机,但在此过程中只使用了一个。
除了 RAM,有没有人有任何建议来改善他的案件的时间问题?在这种情况下,添加 RAM 真的会有很好的影响吗?
默认情况下,他使用的是牛顿法。 我不确定更改此选项是否有用。
非常感谢您的建议,
佛罗伦萨
PS:祝大家节日快乐!
回复:非线性性能我同意尼克的方法,尤其是起点和使用的算法。 使用牛顿时,起点非常重要。 即使这样,您也可能只是根据后面的方法想出一个本地解决方案。 如果您具有具有多个转折点的高度非线性行为,那么牛顿也有困难,那么它可能会从一个最佳值跳到另一个最佳值并且很难收敛。 BFGS 或 Quasi Neeton 应该表现更好。 而且它们更有可能产生真正的最佳结果。 他应该试试这两个建议,以防他无法提前减少参数集。 我也同意这是一个很大的参数集。 虽然在数值优化中并不少见。 但是,您必须记住,对于牛顿,您需要在每次迭代中计算 16x16 hessian 及其倒数,这非常耗时。 同样对于牛顿,我不认为它是多线程的,因为每一步都需要计算上一步的导数。但是在hessian的计算中它可以是多线程的。我也不确定在 JMP 中是否实现了与 1 不同的步长,这对于具有许多极端的高度非线性函数可能更好。 BFGS 和例如 levenberg markwardt 正在使用基于先前迭代的梯度信息的 hessian 的近似值,。 因此你需要更少的操作。回复:非线性性能嗨,佛罗伦萨!
一个有 16 个参数的模型听起来很多……他们运行 16 个参数有什么原因(物理模型等)吗? 另外,他们使用的是什么版本的 JMP、操作系统、内存大小等?
非线性是超线程的(参见“使用 JMP”第 602 页),因此它应该在所有 4 个内核上运行。 如果您在他安装时没有看到其他内核有任何负载,那么他可能设置了一些不允许超线程的东西。 我会首先追求它,因为它会在 JMP 上全面提升性能。
最好的,
米
回复:非线性性能我总是与使用非线性平台的客户分享以下策略,通常这些将有助于快速收敛到解决方案:
- 使用迭代选项的各种组合(Newton、QuasiNewton BFGS、QuasiNewton SR1 和仅限数值导数)
- 使用滑块调整参数的起始值以直观地修改曲线以更好地适应
- 通过变换方程使多项式居中,这将改善优化条件
- 增加允许的迭代次数
- 放宽收敛标准之一
- 尝试不同的模型,如果数据没有表现出与所选模型相同的关系,将很难收敛到一个解决方案。
- 减少参数的数量,过度定义的模型是指参数多于对关系建模所需的参数。
回复:非线性性能你好佛罗伦萨,
这听起来可能有点落后,但我建议您的客户尝试对更小的数据子集进行参数估计,然后将估计值与更大的数据集进行比较,看看它们与使用完整数据集的差距有多大。他们能否用 10% 或 20% 的数据得到一组合理的估计值? 一旦他们有了一组他们信任的参数,他们就可以将公式应用于其余的数据集。
最好的,
账单