我正在尝试使用optimize.min_tnc最小化逻辑回归问题的成本函数,但我遇到此错误的问题:
ValueError: operands could not be broadcast together with shapes (401,5000) (401,)
我确保我的grad功能输出正确的形状。我将把输出 gradfunction 的代码放在这里:
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不太熟悉。