1

これで Python コードを実装できました。

def logistic(z):
    return 1.0 / (1.0 + np.exp(-z))
def gradient_testing(X,Y,w):
   K = len(w)
   N = len(X)
   s = np.zeros(K)

   for i in range(N):
         s += Y[i] * X[i] * logistic(-Y[i] * np.dot(X[i], w))

   s = -1 *s/N
   return s

X80*23 マトリックス、w1 *23 マーティクス、Y80*1 マトリックスです。私のコードからは、反復ごとに毎回 1*23 が返されます。しかし、それは私の要件を満たしていませんでした。

最初の反復では、1*23 の値が返され、次に最大のものを選択します。たとえば、s[8]. そして、現在の反復はs[8]から更新されませんY[i] * X[i] * logistic(-Y[i] * np.dot(X[i], w))。この繰り返しで、8 番目の要素Y[i] * X[i] * logistic(-Y[i] * np.dot(X[i], w))が最大の場合、次の繰り返しでs[9]は更新されません。コードを変更するにはどうすればよいですか?

4

1 に答える 1

0

簡単に説明k_range!=max_idxすると、配列は次のようになります。1ここで、インデックスは前の最大値の0インデックスと等しくなく、インデックスは前の最大値のインデックスと等しくなります。最初の反復中max_idxは -1 であるためk_range!=max_idx、1 の配列が得られます。

def gradient_testing(X,Y,w):
    K = len(w)
    N = len(X)
    s = np.zeros(K)
    max_idx=-1
    k_range=np.arange(K)

    for i in range(N):
        _temp_max= Y[i] * X[i] * logistic(-Y[i] * np.dot(X[i], w))
        s+=_temp_max*(k_range!=max_idx)
        max_idx=np.argmax(_temp_max)

    s = -1 *s/N
    return s
于 2013-09-30T04:18:38.893 に答える