使用optimize.min_tnc

时间:2017-02-23 16:05:52

标签: python pandas machine-learning logistic-regression numpy-broadcasting

我正在尝试使用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不太熟悉。

0 个答案:

没有答案