Функция минимизации затрат с optimize.min_tnc

Я пытаюсь минимизировать функцию стоимости для проблемы логистической регрессии, используя optimize.min_tnc, но у меня возникают проблемы с этой ошибкой:

ValueError: operands could not be broadcast together with shapes (401,5000) (401,) 

Я убедился, что моя функция града выводит правильные формы. Я поставлю здесь мой код для функции gradf с ее выводом:

def gradFunction(Theta,X,y,l):
grad = np.zeros((X.shape[1],1))

H = sigmoid(X.dot(Theta))
#grad  = (1.0/m) * (X.T.dot(error)) + (l/m) * Theta 
grad  = (1.0/m) * np.dot(X.T,H - y) + (l/m) * Theta 

grad[0] = (1.0/m)*X[:,0].T.dot(H)
print np.dot(X.T,H).shape
print Theta.shape
return grad 

print gradFunction(Theta_initial,X,(y==1),1)

Вывод следующий:

(401, 1)
(401, 1)
[[  4.00000000e-01]
 [  0.00000000e+00]
 [  0.00000000e+00]
 [ -7.74530186e-08]
 [  4.91729643e-07]
 [ -2.32940155e-07] ...

Так с np.dot(X.T,H - y) а также Theta у операндов не должно быть проблем, передаваемых вместе.

Проблема возникает, когда я использую fmin_tnc, чтобы минимизировать мою функцию стоимости следующим образом:

result = opt.fmin_tnc(func=costFunctionReg,x0=Theta_initial,args=(X,(y==1),l),fprime=gradFunction)

Я получил эту ошибку:

 <ipython-input-117-d6f49d9f240a> in gradFunction(Theta, X, y, l)
     33     H = sigmoid(X.dot(Theta))
     34     #grad  = (1.0/m) * (X.T.dot(error)) + (l/m) * Theta
---> 35     grad  = (1.0/m) * np.dot(X.T,H - y) + (l/m) * Theta
     36 
     37     grad[0] = (1.0/m)*X[:,0].T.dot(H - y)

ValueError: operands could not be broadcast together with shapes (401,5000) (401,) 

Я пытаюсь понять, почему вход np.dot(XT,H - y) теперь имеет (400,5000) форму, но когда я проверяю его раньше, чем это было (401,1), что вызывает ошибку вещания.

5000 - это количество обучающих примеров.

PS: я не очень знаком с min_tnc и np.arrays.

0 ответов

Другие вопросы по тегам