Поиск минимума функции с scipy.optimize.minimize
Прошу помочь с исправлением ошибки. Код оптимизации следующий:
import numpy as np
from scipy.optimize import Bounds, minimize
m = 20
n = 10
np.random.seed(1)
X = np.random.randn(m, n)
y = np.random.randn(m)
bounds = Bounds(np.zeros([n]), np.ones([n]))
def f_1(theta):
return (np.dot(X,theta) - y)**2
theta = np.random.randn(n)
x0 = np.random.randn(n)
minimize(f_1, x0=x0, bounds=bounds)
Получаю ошибку:
ValueError Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/scipy/optimize/optimize.py in _approx_fprime_helper(xk, f, epsilon, args, f0)
699 try:
--> 700 df = df.item()
701 except (ValueError, AttributeError):
ValueError: can only convert an array of size 1 to a Python scalar
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
4 frames
/usr/local/lib/python3.6/dist-packages/scipy/optimize/optimize.py in _approx_fprime_helper(xk, f, epsilon, args, f0)
700 df = df.item()
701 except (ValueError, AttributeError):
--> 702 raise ValueError("The user-provided "
703 "objective function must "
704 "return a scalar value.")
ValueError: The user-provided objective function must return a scalar value.
Не понимаю, что именно не нравится интерпретатору?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
В документации неявно указаны требования к минимизируемой функции:
fun: callable
The objective function to be minimized.
fun(x, *args) -> float
NOTE: --------> ^^^^^^^^!!!!!where
xis an 1-D array with shape (n,) andargsis a tuple of the fixed parameters needed to completely specify the function.
Т.е. функция должна возвращать скалярное значение типа float или скаляр такого типа, который может быть преобразован к float.