2012-04-21 22 views
10

Sto giocando con la regressione logistica in Python. Ho implementato una versione in cui la minimizzazione della funzione di costo viene eseguita tramite la discesa del gradiente e ora mi piacerebbe utilizzare l'algoritmo BFGS da scipy (scipy.optimize.fmin_bfgs).uso corretto di scipy.optimize.fmin_bfgs

Ho un set di dati (caratteristiche nella matrice X, con un campione in ogni riga di X e le etichette corrispondenti nel vettore verticale y). Sto cercando di trovare i parametri per ridurre al minimo Theta:

enter image description here

ho difficoltà a capire come fmin_bfgs funziona esattamente. Per quanto ho capito, devo passare una funzione da minimizzare e una serie di valori iniziali per Theta.

faccio la seguente:

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

dove computeCost calcola J (Thetas) come sopra illustrato. Ma ottengo alcuni errori relativi all'indice, quindi penso di non fornire ciò che si aspetta fmin_bfgs.

Qualcuno può far luce su questo?

+4

Ah, [debugging anatra di gomma] (http://en.wikipedia.org/wiki/Rubber_duck_debugging) =) – katrielalex

+0

@katrielalex Così vero !! : D – Cristina

risposta

4

Dopo aver perso ore su di esso, risolto di nuovo con il potere di pubblicare ... Stavo definendo computeCost (X, y, Thetas), ma poiché Thetas è il parametro target per l'ottimizzazione, avrebbe dovuto essere il primo parametro nel firma. Risolto e funziona!

0

non conosco tutto il tuo codice, ma hai provato

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

? Questo x0 dovrebbe essere un vettore 1d, penso.

+0

È un vettore 1D, perché il secondo parametro della forma in numpy.zeros() è 1. Grazie per aver trovato il tempo di suggerirlo, però! – Cristina