0

このコードで何が間違っているのかわかりません。期待値最大化アルゴリズム (下の疑似コードのスクリーンショット) を実装しようとしていますが、ベータ版を正しく最小化していないと思います。これを修正する方法について何か考えはありますか?

これは疑似コードへのリンクです > 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回の反復で真のベータに収束する真のベータから、ベータの最初の推定がどれだけ離れているかについて、真のベータの周りの半径を見つけられるようにしたいと考えています。

4

0 に答える 0