我不确定我对这段代码做错了什么。我正在尝试实现期望最大化算法(下面的伪代码截图),我认为我没有正确地最小化 Beta。关于如何解决这个问题的任何想法?
这是此处伪代码的链接 > 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
具体的问题是如何最小化 beta 以使它们与我最初在这 500 次迭代中设置的真实 beta 收敛。
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
最终,我希望能够找到围绕真实 Beta 的半径,即 Beta 的初始猜测与真实 Beta 之间的距离,在 500 次迭代中它仍会收敛到真实 Beta