2012-04-21 16 views
10

Estoy jugando con la regresión logística en Python. Implementé una versión donde la minimización de la función de costo se realiza mediante el descenso de gradiente, y ahora me gustaría utilizar el algoritmo BFGS desde scipy (scipy.optimize.fmin_bfgs).uso correcto de scipy.optimize.fmin_bfgs

Tengo un conjunto de datos (funciones en la matriz X, con una muestra en cada fila de X, y las etiquetas correspondientes en el vector vertical y). Estoy tratando de encontrar parámetros para minimizar Theta:

enter image description here

que tienen problemas para entender cómo fmin_bfgs funciona exactamente. Por lo que yo entiendo, tengo que pasar una función para minimizarla y un conjunto de valores iniciales para Thetas.

hago lo siguiente:

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

donde computeCost calcula J (Thetas) como se ilustra anteriormente. Pero recibo algunos errores relacionados con el índice, así que creo que no estoy proporcionando lo que fmin_bfgs espera.

¿Alguien puede arrojar algo de luz sobre esto?

+4

Ah, [depuración de pato de goma] (http://en.wikipedia.org/wiki/Rubber_duck_debugging) =) – katrielalex

+0

@katrielalex ¡Tan cierto! : D – Cristina

Respuesta

4

Después de perder horas en él, resuelto de nuevo por el poder de publicar ... Estaba definiendo computeCost (X, y, Thetas), pero como Thetas es el parámetro objetivo para la optimización, debería haber sido el primer parámetro en el firma. ¡Reparado y funciona!

0

no sé su código entero, pero ¿ha intentado

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

? Este x0 debería ser un vector 1d, creo.

+0

Es un vector 1D, porque el segundo parámetro de la forma en numpy.zeros() es 1. ¡Gracias por tomarse el tiempo para sugerirlo! – Cristina