2012-04-21 13 views
10

Gram z regresją logistyczną w Pythonie. Zaimplementowałem wersję, w której minimalizacja funkcji kosztowej odbywa się za pomocą gradientowego spadku, a teraz chciałbym użyć algorytmu BFGS z scipy (scipy.optimize.fmin_bfgs).poprawne użycie scipy.optimize.fmin_bfgs

Mam zestaw danych (funkcje w macierzy X, z jedną próbką w każdym wierszu X i korelacji etykiety w pionowym wektorze y). Próbuję znaleźć parametry Theta aby zminimalizować:

enter image description here

mam problemy ze zrozumieniem jak fmin_bfgs działa dokładnie. O ile je otrzymuję, muszę przekazać funkcję, która ma być zminimalizowana, oraz zestaw początkowych wartości dla Thetas.

zrobić następujące:

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

gdzie computeCost oblicza J (Thetas), jak pokazano powyżej. Ale dostaję pewne błędy związane z indeksami, więc myślę, że nie dostarczam tego, czego oczekuje fmin_bfgs.

Czy ktoś może rzucić trochę światła na to?

+4

Ah, [gumowe debugowanie kaczek] (http://en.wikipedia.org/wiki/Rubber_duck_debugging) =) – katrielalex

+0

@katrielalex Tak naprawdę !! : D – Cristina

Odpowiedz

4

Po marnowaniu godzin na nim, rozwiązany ponownie dzięki mocy księgowania ... Definiowałem ComputeCost (X, y, Thetas), ale ponieważ Thetas jest parametrem docelowym do optymalizacji, powinien on być pierwszym parametrem w podpis. Naprawiono i działa!

0

nie wiem, cały kod, ale czy próbowałeś

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

? Ten x0 powinien być wektorem 1d, jak sądzę.

+0

Jest to wektor 1D, ponieważ drugi parametr kształtu w numpy.zeros() to 1. Dzięki za poświęcenie czasu, aby to zasugerować! – Cristina

Powiązane problemy