期望最大化实施

时间:2018-05-24 15:54:56

标签: python machine-learning mixed-models expectation-maximization

我不确定这个代码我做错了什么。我正在尝试实现期望最大化算法(下面的伪代码截图),我想我没有正确地最小化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值

0 个答案:

没有答案