matrices não estão alinhados Erro: SciPy do Python fmin_bfgs

Problem Synopsis: Ao tentar usar a função de minimização (otimização) scipy.optimize.fmin_bfgs, a função lança uma

derphi0 = np.dot (gfk, pk) ValorErro:matrices não estão alinhados

erro. De acordo com meu erro de verificação, isso ocorre no final da primeira iteração por meio de fmin_bfgs - pouco antes de quaisquer valores serem retornados ou chamadas para retorno de chamad

Configuração Windows Vista Python 3.2.2 SciPy 0.10 IDE = Eclipse com PyDev

Descrição detalhada Estou usando o scipy.optimize.fmin_bfgs para minimizar o custo de uma implementação de regressão logística simples (convertendo de Octave para Python / SciPy). Basicamente, a função de custo é denominada função cost_arr e a descida do gradiente está na função gradient_descent_ar

Testei manualmente e verifiquei completamente que * cost_arr * e * gradient_descent_arr * funcionam corretamente e retornam todos os valores corretamente. Também testei para verificar se os parâmetros adequados são passados para a função * fmin_bfgs *. No entanto, quando executado, recebo o ValueError: matrizes não estão alinhadas. De acordo com a revisão de origem, o erro exato ocorre no

def line_search_wolfe1 funciona nas pesquisas de linha e escalares do # Minpack Wolfe, conforme fornecido pelos pacotes scip

Notavelmente, se eu usar scipy.optimize.fmin em vez disso, o fmin função @ é executada até a conclusã

Erro exato:

Arquivo "D: \ Usuários \ Shannon \ Programação \ Eclipse \ espaço de trabalho \ SBML \ sbml \ LogisticRegression.py", linha 395, em fminunc_opt

optcost = scipy.optimize.fmin_bfgs(self.cost_arr, initialtheta, fprime=self.gradient_descent_arr, args=myargs, maxiter=maxnumit, callback=self.callback_fmin_bfgs, retall=True)   

Arquivo "C: \ Python32x32 \ lib \ pacotes de sites \ scipy \ optimize \ optimize.py", linha 533, em fmin_bfgs old_fval, old_old_fval)
Arquivo "C: \ Python32x32 \ lib \ pacotes de sites \ scipy \ otimize \ linesearch.py", linha 76, em line_search_wolfe1 derphi0 = np.dot (gfk, pk) ValueError: matrizes não estão alinhadas

Chamo a função de otimização com: optcost = scipy.optimize.fmin_bfgs (self.cost_arr, initialtheta, fprime = self.gradient_descent_arr, args = myargs, maxiter = maxnumit, retorno de chamada = self.callback_fmin_bfgs, retall = True)

Passei alguns dias tentando corrigir isso e não consigo determinar o que está causando omatrices não estão alinhados erro.

ADDENDUM: 2012-01-08 Eu trabalhei muito mais com isso e parece ter restringido os problemas (mas estou desconcertado sobre como corrigi-los). Primeiro, fmin (usando apenas fmin) funciona usando essas funções - custo, gradiente. Segundo, as funções de custo e gradiente retornam com precisão os valores esperados quando testados em uma única iteração em uma implementação manual (NÃO usando fmin_bfgs). Terceiro, adicionei o código de erro para optimize.linsearch e o erro parece ter sido lançado em def line_search_wolfe1 na linha: derphi0 = np.dot (gfk, pk). Aqui, de acordo com meus testes, scipy.optimize.optimize pk = [[12.00921659] [11.26284221]] pk type = e scipy.optimize.optimizegfk = [[-12.00921659] [-11.26284221]] gfk type = Nota: de acordo com o meu Nos testes, o erro é gerado na primeira iteração por meio de fmin_bfgs (ou seja, fmin_bfgs nunca conclui nem uma única iteração ou atualização

Aprecio qualquer orientação ou insight

My Code Abaixo (registro, documentação removida): Suponha theta = 2x1 ndarray (Real: theta Info Size = (2, 1) Type =) Suponha X = 100x2 ndarray (Real: X Info Size = (2, 100) Type = ) Suponha que y = matriz 100x1 (Real: y Tamanho da informação = (100, 1) Tipo =)

def cost_arr(self, theta, X, y):

    theta = scipy.resize(theta,(2,1))         

    m = scipy.shape(X)

    m = 1 / m[1] # Use m[1] because this is the length of X
    logging.info(__name__ + "cost_arr reports m = " + str(m))         

    z = scipy.dot(theta.T, X) # Must transpose the vector theta               

    hypthetax = self.sigmoid(z)

    yones = scipy.ones(scipy.shape(y))

    hypthetaxones = scipy.ones(scipy.shape(hypthetax))

    costright = scipy.dot((yones - y).T, ((scipy.log(hypthetaxones - hypthetax)).T))

    costleft = scipy.dot((-1 * y).T, ((scipy.log(hypthetax)).T))


def gradient_descent_arr(self, theta, X, y):

    theta = scipy.resize(theta,(2,1)) 

    m = scipy.shape(X)

    m = 1 / m[1] # Use m[1] because this is the length of X

    x = scipy.dot(theta.T, X) # Must transpose the vector theta

    sig = self.sigmoid(x)

    sig = sig.T - y

    grad = scipy.dot(X,sig)

    grad = m * grad

    return grad

def fminunc_opt_bfgs(self, initialtheta, X, y, maxnumit):
    myargs= (X,y)

    optcost = scipy.optimize.fmin_bfgs(self.cost_arr, initialtheta, fprime=self.gradient_descent_arr, args=myargs, maxiter=maxnumit, retall=True, full_output=True)

    return optcost

questionAnswers(2)

yourAnswerToTheQuestion