2016-04-28 3 views
1

У меня есть матрица ковариаций 1500x1500, из которой я пытаюсь вычислить определитель для метода EM-ML. Ковариационную матрицу получают путем нахождения матрицы SIGMA, а затем передают ее в ближайшую библиотеку (Link), чтобы сделать матрицу положительной. В этом случае матрица всегда сингулярна. Другой метод, который я пытался, заключался в том, чтобы вручную создать положительно определенную матрицу с использованием техники A '* A. (A взято как матрица 1600x1500). Это всегда дает мне определитель как бесконечный. Любая идея о том, как я могу получить положительно определенную матрицу с конечным определителем?MATLAB: Определитель ковариационной матрицы равен либо 0, либо inf

+0

Самый простой способ - матрица единства 'eye (N)'. Утверждения *. Определитель любой основной подматрицы матрицы M (и M можно понимать как самую большую подматрицу M) отличен от нуля и положителен. * И * M положительно определен * * эквивалентны. Поэтому я полагаю, что у вас есть проблема с переполнением значения realmax. Вы пытались вычислить 'det (A * 10^-6)' например? – Crowley

+0

Вы также можете попытаться найти самую большую сумбатрицу, которую можно оценить, перебирая 'ii' команду' DetMinorA (ii) = det (A (1: ii, 1: ii)); ' – Crowley

+0

Итак, я попробовал' det (A * 10e-6), и теперь это дает мне определитель как нуль. Кроме того, 'DetMinorA (ii) = det (A (1: ii, 1: ii));' дает мне конечные значения до 145-го индекса. Что с этим делать? – Timelapse

ответ

0

Вам действительно нужен определитель или журнал определителя? Например, если вы вычисляете логарифмическую вероятность gaussians, то то, что входит в логарифмическую правдоподобие, является журналом определителя. В высоких измерениях детерминанты мей не вписываются в двойной, но его журнал, скорее всего, будет.

При выполнении Чолески факторизации ковариационных С, (нижней треугольным) фактор L сказать, что

C = L*L' 

затем

det C = det(L) * det(L') = det(L) * det(L) 

Но определитель нижней треугольной матрицы является продукт его диагональных элементов, поэтому, беря журналы выше, мы получаем:

log det C = 2*Sum{ i | log(L[i,i])} 

(В ответ на комментарий) Даже если вам нужно рассчитать gaussian pdf, лучше вычислить его журнал и оценить его только тогда, когда вам нужно. Например объявления dimenions гауссового с ковариационным C (который имеет Чолески фактора L) и среднего 0 (чисто для сохранения ввода данных):

p(x) = exp(-0.5*x'*inv(C)*x) /(sqrt(pow(2pi,d) * det(C)) 

так

log p(x) = -0.5*x'*inv(C)*x - 0.5*d*log(2pi) - 0.5*log(det(C)) 

, которые также могут быть написаны

log p(x) = -0.5*y'*y - 0.5*d*log(2pi) - log(det(L)) 

где

y = inv(L)*x 
+0

Да, мне понадобится детерминант, так как мне нужно создать функцию распределения вероятности Гаусса, которая имеет знак '| SIGMA |' в своем знаменателе. – Timelapse

Смежные вопросы