2012-03-30 4 views
3

Давайте предположим, что у меня есть две модели gmdistibution что я, полученные с использованиемgmdistribution для классификации в Matlab

modeldata1=gmdistribution.fit(data1,1); 
modeldata2=gmdistribution.fit(data2,1); 

Теперь у меня есть неизвестное наблюдение «данные», и я хочу, чтобы увидеть, если он принадлежит к data1 или data2.

Основываясь на моем понимании этих функций, вывод nlogn с использованием команд posterior, cluster или pdf не будет хорошей мерой, поскольку я сравниваю «данные» с двумя разными дистрибутивами.

Какую меру или выход следует использовать, найдите, что такое p(data|modeldata1) and p(data|modeldata2)?

Большого спасибо,

ответ

2

Если я вас правильно понял, вы хотите назначить новый, неизвестный, Datapoint либо класс 1 или 2 с дескрипторами для каждого класса (в данном случае среднего вектор и ковариационная матрица), найденный gmdistribution.fit.

Увидев этот новый datapoint, позвоните ему x, вы должны спросить себя, что такое p (modeldata1 | x) и p (modeldata2 | x), и который когда-либо один из них является самым высоким, вы должны назначить x.

Итак, как вы их найдете? Вы просто применить правило Байеса и выбрать, какой-либо один является самым крупным из:

p(modeldata1 | x) = p(x|modeldata1)p(modeldata1)/p(x) 
p(modeldata1 | x) = p(x|modeldata2)p(modeldata2)/p(x) 

Здесь вам не нужно вычислить р (х), как это одно и то же в каждом уравнении.

Итак, теперь вы оцениваете априорные р (modeldata1) и р (modeldata2) по количеству учебных пунктов от каждого класса (или использовать некоторую данную информацию), а затем рассчитать

p(x|modeldata1)=1/((2pi)^d/2 * sqrt(det(Sigma1)))*exp(0.5*(x-mu1)/Sigma1*(x-mu1)) 

где d является размерность ваших данных, Sigma - это матрица корреляций, а mu - средний вектор. Затем вас попросят p (data | modeldata1). (Не забудьте также использовать p (modeldata1) и p (modeldata2), когда вы выполняете классификацию).

Я знаю, что это было немного неясно, но, надеюсь, оно может помочь вам с шагом в правильном направлении.

EDIT: Лично я нахожу визуализацию, такую ​​как приведенная ниже (берет из Распознавания образов Теодоридисом и Кутрумбасом). Здесь у вас есть две гауссовские смеси с некоторыми перьями и разными ковариационными матрицами. Синяя область - это то место, где вы бы выбрали один класс, в то время как серая область будет выбрана другой. enter image description here

+0

Правильно, но дело в том, что я могу найти вероятность (или, точнее, nlogliklihood) с самим Matlab. Однако эти цифры на самом деле не придают мне значения. Кажется, им нужна нормализация, которую я не могу понять. – Louis

+0

Как вы это понимаете? Какой диапазон чисел вы обычно получаете? Имейте в виду, что вы не можете ожидать, что p (x | y) (распределение вероятности) будет находиться в [0, 1] в непрерывном случае. – Vidar

+0

Если я предполагаю, что предыдущий p (modeldata1) = p (modeldata2), а p (x) не имеет значения, поскольку он будет иметь такой же эффект на p (modeldata1 | x) и p (modeldata2 | x). Тогда я могу основать свое решение на nlogn? Я думаю, что ваша точка зрения - это именно моя путаница. P (x | y) не обязательно должно быть [0 до 1], но это еще один случай, если (p1 | x)> (p2 | x), то у меня есть большая вероятность, что выбрать p1 над p2 вправо?(Надеюсь, я поставил свою точку зрения) – Louis

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