我不确定这个代码我做错了什么。我正在尝试实现期望最大化算法(下面的伪代码截图),我想我没有正确地最小化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
具体问题是我如何以最初在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
最终,我希望能够在真正的测试中找到一个半径,即Betas的最初猜测距离真正的Betas有多远,它仍会在500次迭代中收敛到真正的beta值