有什么方法可以为Scipy的优化曲线拟合提供限制吗?
我的例子:
def optimized_formula(x, m_1, m_2, y_1, y_2, ratio_2):
return (log(x[0]) * m_1 + m_2)*((1 - x[1]/max_age)*(1-ratio_2)) + ((log(x[1]) * y_1 + y_2)*(x[1]/max_age)*ratio_2)
popt, pcov = optimize.curve_fit(optimized_formula, usage_and_age, prices)
x[0]是年龄,max_age是常数。考虑到这一点,当x[0]接近最大值时,x[1]/max_age接近1。
是否可以提供x[1]/max_age>;0.3和x[1]/max_age<;0.7等约束/限制,以及m_1<;0、m_2>;0等其他约束。
注:SciPy 0.17版中的新版本
假设您希望将模型与如下所示的数据相匹配:
在阿尔法的约束下
其他参数a和b保持自由。然后我们应该使用optimize.curve_fit的bounds选项:
来源是here
尝试lmfit模块(http://lmfit.github.io/lmfit-py/)。它为scipy.optimize中的许多优化例程(包括最小二乘法)添加了一种修复或设置参数边界的方法,并提供了许多使拟合更容易的工具。
正如另一个答案中所建议的,您可以使用lmfit来解决此类问题。因此,我添加了一个例子来说明如何使用它,以防有人也对这个主题感兴趣。
假设您有一个数据集,如下所示:
您希望将模型与如下所示的数据相匹配:
限制条件是
使用
lmfit
(0.8.3版)可以获得以下输出:如您所见,fit很好地再现了数据,并且参数在请求的范围内。
下面是复制情节的完整代码,并附带一些注释:
编辑:
如果使用0.9.x版本,则需要相应地调整代码;请检查here哪些更改已从0.8.3更改为0.9.x
相关问题 更多 >
编程相关推荐