このコードで何が間違っているのかわかりません。期待値最大化アルゴリズム (下の疑似コードのスクリーンショット) を実装しようとしていますが、ベータ版を正しく最小化していないと思います。これを修正する方法について何か考えはありますか?
これは疑似コードへのリンクです > EM Algo
以下は、擬似コードを複製するために書いたコードです
import numpy as np
from sklearn import datasets, linear_model
import warnings
warnings.filterwarnings("ignore")
#b_1 = np.random.randn(5,1)
#b_2 = np.random.randn(5,1)
b_1 = np.array([1,1,2,2,2])
b_2 = np.array([2,2,1,1,3])
iteration = 500
data_y = np.random.random_integers(500, size=(300, 1))
data_x = np.random.random_integers(500, size=(300, 5))
def em(b_1,b_2,iteration, data_y, data_x):
for t in range(1, iteration+1):
J_1=[]
J_2=[]
for i in range(len(data_y)):
if abs(data_y[i]-(np.dot(data_x[i],b_1))) < abs(data_y[i]-(np.dot(data_x[i],b_2))):
J_1.append(i)
else:
J_2.append(i)
b_1 = np.argmin((np.sum(J_1[data_y] - (J_1[data_x])*b_1)**2)**.5)
b_2 = np.argmin((np.sum(J_2[data_y] - (J_2[data_x])*b_2)**2)**.5)
return b_1, b_2
具体的な問題は、これらの 500 回の反復で最初に設定した真のベータに収束するようにベータを最小化するにはどうすればよいかということです。
b_1 = np.argmin((np.sum(J_1[data_y] - (J_1[data_x])*b_1)**2)**.5)
b_2 = np.argmin((np.sum(J_2[data_y] - (J_2[data_x])*b_2)**2)**.5)
上記の行でこのエラーが発生します
only integer scalar arrays can be converted to a scalar index
最終的には、500回の反復で真のベータに収束する真のベータから、ベータの最初の推定がどれだけ離れているかについて、真のベータの周りの半径を見つけられるようにしたいと考えています。