【发布时间】:2012-10-04 04:41:03
【问题描述】:
我有一个简单的功能
def square(x, a=1):
return [x**2 + a, 2*x]
我想在x 上最小化它,对于几个参数a。我目前有循环,在精神上,做这样的事情:
In [89]: from scipy import optimize
In [90]: res = optimize.minimize(square, 25, method='BFGS', jac=True)
In [91]: [res.x, res.fun]
Out[91]: [array([ 0.]), 1.0]
In [92]: l = lambda x: square(x, 2)
In [93]: res = optimize.minimize(l, 25, method='BFGS', jac=True)
In [94]: [res.x, res.fun]
Out[94]: [array([ 0.]), 2.0]
现在,函数已经向量化了
In [98]: square(array([2,3]))
Out[98]: [array([ 5, 10]), array([4, 6])]
In [99]: square(array([2,3]), array([2,3]))
Out[99]: [array([ 6, 12]), array([4, 6])]
这意味着并行运行所有优化而不是循环运行可能会快得多。使用 SciPy 可以轻松做到这一点吗?还是任何其他 3rd 方工具?
【问题讨论】:
-
我不明白您要优化什么:您的函数返回两个值。顺便说一句,第一个是抛物线,最小值为零,第二个没有最小值
-
查看docs,特别注意
jac = True的含义。该函数返回“成本”和梯度。 -
澄清一下:您是在为这个特定的简单功能或任何简单功能寻找解决方案吗?
-
为任何给定的函数寻找这个问题的解决方案。这个例子只是一个简单的说明。我真正的问题是尝试实现多类分类算法。我目前正在遍历每个班级并最小化每个班级一次的成本函数。但是我的成本函数可以轻松返回成本向量和梯度向量,但我正在尝试找出如何将其提供给 scipy.optimize。
标签: python optimization scipy