python - Scipy curve_fit 卡在边界上?
问题描述
(这与其说是一个技术性的操作问题,不如说是试图了解幕后发生的事情以及我遇到的问题是否是一个常见问题。请不要标记我!)
我一直在运行一些非线性回归,scipy.optimize.curve_fit
并注意到优化似乎经常卡在参数范围内。就上下文而言,我用其他软件做了相当多的非线性优化,尽管我不是算法方面的专家;这是我第一次使用它,它只是……比我预期scipy
的卡住了很多。
我正在输入的函数示例curve_fit
- 这里是各种数据系列t
,dn
长度约为 100-150:
def dynamic(exogs, alpha_0, delta, theta, beta):
t, dn = exogs
alpha_f = alpha_0 * delta
return np.log(beta) - (alpha_0 + (1 - np.exp(-t/theta)) * (alpha_f - alpha_0)) * dn
non_bds = ([1e-02, 0.1, 5, 0],
[1e02, 10, 1e03, 10])
fit_non = curve_fit(dynamic, [df['t'], df['dn']], Y, bounds=non_bds, loss='huber', max_nfev=1e06)
在这种情况下,delta
大约 90% 的时间会卡在边界(0.1 或 10),theta
大约 50% 的时间会卡在边界上,这两者都不是我所期望的。
我发现这个答案似乎curve_fit
有时表现得很奇怪,所以我想知道 - 优化器curve_fit
卡在边界上是否很常见?这是一个已知问题吗?是否有任何好的方法可以通过调整任何设置或其他解决方法来解决它?
解决方案
推荐阅读
- python - 有没有一种快速的方法来更新嵌套字典中具有特定值的一组键?
- javascript - 如何知道消息何时被php驳回
- javascript - Angular 9 动态禁用表单控件
- python - y 轴直方图中的百分比 Matplotlib
- sql-server - 为什么 SSRS 报告在半小时后停止返回数据?
- c++ - Swift - 来自 C++ 的 CRC8 计算转换
- python - 使用户配置文件对所有用户可见包括 Django 上的 AnonyMouseUser()
- javascript - 使用过滤器扩展时自定义节点事件处理程序丢失
- android - 将布局约束为屏幕高度的 50%?
- python - Django 将外键值与另一个模型的属性进行比较