Реализация наивного байесовского алгоритма в MATLAB - Нужны некоторые рекомендации - PullRequest
4 голосов
/ 27 ноября 2011

У меня есть проблема двоичной классификации, которую я должен сделать в MATLAB. Существует два класса, и данные обучения и задачи тестирования относятся к двум классам и представляют собой 2-мерные координаты, полученные из гауссовых распределений.

Выборки являются точками 2D, и они примерно такие (1000 выборок для класса A и 1000 выборок для класса B): Я просто публикую некоторые из них здесь:

5,867766 3,843014 5.019520 2.874257 1.787476 4.483156 4.494783 3.551501 1,212243 5,949315 2.216728 4.126151 2.864502 3.139245 1,532942 6,669650 6.569531 5.032038 2.552391 5.753817 2.610070 4.251235 1,943493 4,326230 1.617939 4.948345

Если поступают новые тестовые данные, как мне классифицировать тестовый образец?

P (Class / TestPoint) пропорционально P (TestPoint / Class) * (ProbabilityOfClass).

Я не уверен, как мы вычисляем переменную P (Sample / Class) для заданных 2D координат. Прямо сейчас я использую формулу

P (Координаты / Класс) = (Координаты - средние для этого класса) / стандартное отклонение точек в этом классе).

Однако я не получаю очень хороших результатов теста с этим. Я что-то делаю не так?

Ответы [ 2 ]

3 голосов
/ 27 ноября 2011

Это хороший метод, однако формула неверна, посмотрите статью о многомерном гауссовом распределении в Википедии :

P (TestPoint | Class) = enter image description here,

, где enter image description here - определитель А.

 Sigma = classPoint*classPoint';
 mu = mean(classPoint,2);
 proba = 1/((2*pi)^(2/2)*det(Sigma)^(1/2))*...
         exp(-1/2*(testPoint-mu)*inv(Sigma)*(testPoint-mu)');

В вашем случае, поскольку они равны количеству точек в обоих классах, P (класс) = 1/2

0 голосов
/ 27 ноября 2011

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

...