1
我有一個簡單的公式,我通過理解爲scipy.optimize.minimize()函數的錯誤
def chernoff_bound(beta):
return 0.5 * np.exp(-beta * (1-beta))
betas = np.arange(0, 1, 0.01)
c_bound = chernoff_bound(betas)
plt.plot(betas, c_bound)
plt.title('Chernoff Bound')
plt.ylabel('P(error)')
plt.xlabel('parameter beta')
plt.show()
繪製現在,我想找到的值,其中P(誤差)最小。 我試圖通過scipy.optimize.minimize()
功能做(說實話,我以前沒有使用過它,有可能想到的一些錯誤在這裏...)
from scipy.optimize import minimize
x0 = [0.1,0.2,0.4,0.5,0.9]
fun = lambda x: 0.5 * np.exp(-x * (1-x))
res = minimize(fun, x0, method='Nelder-Mead')
而我得到的錯誤是:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-25-2b04597c4341> in <module>()
3 x0 = [0.1,0.2,0.4,0.5,0.9]
4 fun = lambda x: 0.5 * np.exp(-x * (1-x))
----> 5 res = minimize(fun, x0, method='Nelder-Mead')
6 print(res)
/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/scipy/optimize/_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
364
365 if meth == 'nelder-mead':
--> 366 return _minimize_neldermead(fun, x0, args, callback, **options)
367 elif meth == 'powell':
368 return _minimize_powell(fun, x0, args, callback, **options)
/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/scipy/optimize/optimize.py in _minimize_neldermead(func, x0, args, callback, xtol, ftol, maxiter, maxfev, disp, return_all, **unknown_options)
436 if retall:
437 allvecs = [sim[0]]
--> 438 fsim[0] = func(x0)
439 nonzdelt = 0.05
440 zdelt = 0.00025
ValueError: setting an array element with a sequence.
如果有人能指點我這裏的正確軌道,我將非常感激!
不錯,謝謝。由於我有這個情節,我已經可以說這是約。 0.39並將其用作初始猜測...給出相同的結果:) – Sebastian