python - 在搜索函数的最小值时,如何为有限差分梯度设置变量的最小变化?
问题描述
我想在 python y = f(x) 中找到函数的最小值
问题:求解器试图用超接近的 x 值(delta x 在 1e-8 附近)计算梯度,而我的函数 f 对这么小的步长不敏感(即,当 delta x 在 1e-1 附近时,我们可以看到 y 变化) . 因此,求解器的梯度为 0,无法找到合适的解。
我已经尝试过关注 scipy 的求解器,但找不到我正在寻找的选项..
scipy.optimize.minimize
scipy.optimize.fmin
在 Matlab fmincon 中,有一个选项可以完成“DiffMinChange”的工作:有限差分梯度的变量最小变化(正标量)。
解决方案
您可能想尝试使用 scipy 中的 L-BFGS-B:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_l_bfgs_b.html
并提供大约 0.1/0.05 的“epsilon”参数,看看它是否会变得更好。我当然假设您将让求解器通过数值微分(即,您将 fprime=None 和 approx_grad=True 传递给例程)为您计算梯度。
我个人鄙视各种求解器的“最小化”界面,所以我更喜欢自己处理实际的求解器。
推荐阅读
- php - PHP cURL - 登录并使用 cookie 进行下次运行
- c# - 如何使用 API 为 Github 存储库启用页面
- tableau-api - 将聚合不同计数放入 else if tableau
- spring-integration - 如何在spring集成http入站适配器中验证传入的json并返回一个Json响应
- javascript - 仅在 TextInput 焦点/模糊上运行 Reanimated 动画
- javascript - 库存库存数据的 Mongo 聚合
- javascript - 如何使用 getElementById 和 getBBox 来确定 svg 的宽度和高度
- matlab - 查找信号的频率和幅度 [Matlab]
- powershell - 将存储在变量中的(未知)参数传递给另一个 powershell 脚本
- mysql - 当表 C 中只有共享数据时,如何从表 B 更新表 A?