2012-04-21 3 views
10

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

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

+4

Ах, [отладка резиновой утки] (http://en.wikipedia.org/wiki/Rubber_duck_debugging) =) – katrielalex

+0

@katrielalex Так верно !! : D – Cristina

ответ

4

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

0

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

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

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

+0

Это 1D-вектор, потому что второй параметр формы в numpy.zeros() равен 1. Спасибо, что нашли время предложить его, хотя! – Cristina

Смежные вопросы