Правильное использование scipy.optimize.fmin_bfgs

Я играю с логистической регрессией в Python. Я реализовал версию, где минимизация функции стоимости выполняется с помощью градиентного спуска, и теперь я бы хотел использовать алгоритм BFGS из scipy (scipy.optimize.fmin_bfgs).

У меня есть набор данных (функции в матрице X с одним образцом в каждой строке X и корреляционные метки в вертикальном векторе y). Я пытаюсь найти параметры Theta для минимизации:

enter image description here

Мне трудно понять, как работает fmin_bfgs. Насколько я понял, мне нужно передать функцию, которая будет минимизирована, и набор начальных значений для Thetas.

Я делаю следующее:

initial_values = numpy.zeros((len(X[0]), 1))
myargs = (X, y)
theta = scipy.optimize.fmin_bfgs(computeCost, x0=initial_values, args=myargs)

где computeCost вычисляет J (Thetas), как показано выше. Но я получаю некоторые ошибки, связанные с индексом, поэтому я думаю, что не предлагаю, что ожидает fmin_bfgs.

Может ли кто-нибудь пролить свет на это?

Ответ 1

После того, как он потратил много времени на это, снова решил сила публикации... Я определял computeCost (X, y, Thetas), но поскольку Thetas является целевым параметром для оптимизации, он должен был быть первым параметром в сигнатуре, Исправлено и работает!

Ответ 2

Я не знаю весь ваш код, но вы пробовали

initial_values = numpy.zeros(len(X[0])) 

? Это x0 должно быть 1d-вектором, я думаю.