2016-05-15 68 views
0

我想使用計算邏輯迴歸,所以我使用fmin_bfgs。 然而在試圖使用漸變,它提供了錯誤是這樣的:在fmin_bfgs中使用漸變

ValueError: operands could not be broadcast together with shapes (5,25) (5,) 

雖然沒有使用fmin_bfgs,其計算漸變細。

這裏是我的代碼的一部分:

theta, J = fmin_bfgs(costfunction, \ 
     initial_theta , fprime = gradient, args = (X,y==c,lmd)) 
all_theta[:,c] = theta 

這是我如何計算梯度:

def gradient(theta,X,y,lmd): 

    m = len(y) 
    n = len(theta) 
    z = np.dot((np.transpose(X)),theta) 
    h = sigmoid(z) 
    y = np.reshape(y , (-1,1)) 
    h.reshape(m,1) 
    grad = np.dot(X , (h-y))/m 
    #print('grad shape %d'%(grad.shape)) 
    print('grad %d'%(grad)) 
    temp = theta 
    temp[0] = 0 
    grad = grad + (lmd/m)*temp 
    return grad 
+3

你可以添加一個數據的例子,最好的一個函數,產生一些噪音的數據?請參閱[mcve]瞭解如何製作完整但最少的工作示例。 – roadrunner66

+0

請顯示異常的完整回溯,而不僅僅是最後一行 –

回答

0

謝謝您的答覆。我可以找出問題所在。我不得不從'漸變'功能中刪除'重塑'線。

def gradient(theta,X,y,lmd): 
m = len(y) 
n = len(theta) 
z = np.dot(X , theta) 
h = sigmoid(z) 
#y = np.reshape(y , (-1,1)) <-- removed this 
#h.reshape(m,1) <-- removed this 
grad = np.dot(np.transpose(X) , (h-y))/m 
temp = theta 
temp[0] = 0 
grad = grad + (lmd/m)*temp 
return grad 

謝謝大家!