2017-06-01 20 views
0

私は現在、このbeastieをPythonでコード化しようとしています(numpyライブラリを使用しています)。ラムダ* wは合計外にあると考えられます。関数のグラディエントを効率的にコーディング

現在のところ、私はforループと外側の合計を使用して問題をコード化しました。しかし、このアプローチには長い時間がかかります。 yw、およびxのための私のベクトルは非常に大きい - 100,000sの要素を考える。私は単純な行列操作を使用する代わりに要素をベクトル化する単純な方法があるかどうか、別の要素によってベクトルの1つの要素をループするのではないかと考えていました。

これは私のベクトル化コードです:

xty = xtrain.T.dot(ytrain) 
e = math.exp(-w_0.T.dot(xty)) 
gradient = (-xty*(e/1+e)-lambda_var*w_0) 

gradient

+0

シェアあなたの虚偽のコード?また、可能であれば、最小限のサンプル代表入力を追加してください。 – Divakar

答えて

0

私が正しくあなたの問題を理解していれば、あなただけの弾丸をかむとループで行かなければならないかもしれません:

import numpy as np 
wave = 1e3 
xs, ys, w = np.arange(1, 4), np.arange(4, 7), np.arange(7, 10) 
eps = np.zeros(w.T.shape) 
for x, y in zip(xs, ys): 
    eps += -y * np.exp(-y * w.T * x) * x/(1 + np.exp(-y * w.T * x)) 
print(eps + wave * w) 

[ 7000. 8000. 9000.] 
関連する問題