Контекст: я недавно реализовывал алгоритм Expectation-Maximization (EM) для моделей гауссовой смеси, и часть этого процесса включает в себя вычисление гауссовского PDF для различных точек x_i с различными параметрами.Я реализовал это несколько наивно, что было достаточно быстро для того, что мне нужно, но я чувствую, что его можно было бы вычислить быстрее, если бы оно было написано в красивой, чистой матричной форме.Однако я не знаю, как бы вы подошли к тому, чтобы получить его в нужной форме.
Многовариантный гауссовский PDF мне нужен в форме:
p_k (x_i | ?_k, ?_k) = exp (-1/2 (x_i - ?_k) ^ T ?_k ^ -1 (x_i - ?_k)) / [(2?) ^ (d / 2) | ?_k | ^ (1/2)]
Обозначения:
- x_i - это d-мерный вектор входных данных, где 1 ≤ i ≤ N (N - общее количество точек данных)
- k ∈ {1, 2, ..., K} - еще один параметр, по которому я должен вычислить p (x_i) для каждого значения k
- ?_k - это d-мерный набор средств для данных
- ?_k - ковариационная матрица dxd для данных
(Извините, если трудно читать.)
Мои основные путаницы:
- Уравнение, как я напечатал выше, дает скалярную вероятность для одного i и одного k.
- Мне нужно вычислить его для всех i, k, поэтому в конце я бы хотел матрицу значений NxK.
- Основная часть экспоненциальной части, (x_i -_k) Т Θ_k-1 (x_i - μ_k), эффективно принимает вектор 1XD, умножается на матрицу DXD, а затем снова умножает вектором dx1.С одной точкой данных мы получаем в результате скаляр 1x1, но с более чем одной точкой данных мы не получим матрицу NxN?
Может кто-нибудь помочь мне найти более элегантный способнаписать это?Опять же, в конечном итоге я хотел бы получить некоторую однострочную строку для получения матрицы NxK, которую я предположил бы записать в виде: p (X | ?, ?) где X - матрица Nxd, ? - kxdматрица, а ? является матрицей kxdxd.