2016-05-15 8 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 

ありがとうございました!