Функция минимизации затрат с 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.