Я пытаюсь реализовать многомерную модель гауссовой смеси и пытаюсь вычислить функцию распределения вероятностей с использованием тензоров. Есть n точек данных, k кластеров и d измерений. Пока у меня два тензора. Один - это (n,k,d)
тензор центрированных точек данных, а другой - kxdxd
тензор ковариационных матриц. Я могу вычислить матрицу вероятностей nxk
, выполнив команду
centered = np.repeat(points[:,np.newaxis,:],K,axis=1) - mu[np.newaxis,:] # KxNxD
prob = np.zeros(n,k)
constant = 1/2/np.pow(np.pi, d/2)
for n in range(centered.shape[1]):
for k in range(centered.shape[0]):
p = centered[n,k,:][np.newaxis] # 1xN
power = -1/2*(p @ np.linalg.inv(sigma[k,:,:]) @ p.T)
prob[n,k] = constant * np.linalg.det(sigma[k,:,:]) * np.exp(power)
, где sigma
- это треугольная матрица kxdxd
ковариаций, а centered
- мои точки. Какой способ Pythoni c можно сделать с помощью тензорных возможностей numpy?