Детали реализации байесовского классификатора - PullRequest
0 голосов
/ 04 ноября 2011

Я реализовал простой байесовский классификатор, но у меня возникают некоторые проблемы переполнения при использовании его на нетривиальных объемах данных.

Одна стратегия, которую я пытался сделать, чтобы цифры были небольшими,но все же точным было продолжать сокращать числитель и знаменатель с наибольшим общим делителем для каждой части уравнения.Это, однако, работает только тогда, когда они имеют общий делитель ...

Обратите внимание, что проблема идет в обе стороны, когда я держу знаменатели и числители отдельно для большей части вычислений, которые я борюсь с целочисленным переполнениемВыполняя большинство вычислений на лету, используя двойную арифметику, я сталкиваюсь с различными проблемами / ограничениями, которые имеют действительно маленькие двойные значения (как определено IEEE 754).

Как я уверен, некоторые из вас здесьреализовали этот алгоритм раньше, как вы справились с этими проблемами?Я предпочел бы не использовать произвольные типы точности, поскольку они стоят слишком дорого, и я уверен, что существует решение, которое не требует их.

Спасибо.

Ответы [ 2 ]

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

Обычно вы справляетесь с этим, беря логи и используя добавления, а затем выполняя опыт, если хотите вернуться в пространство вероятностей.

p1 * p2 * p3 * ... * pn =exp (log (p1) + log (p2) + log (p3) + ... log (pn))

Вы избегаете недостаточных потоков, работая в пространстве журнала.

0 голосов
/ 07 марта 2012

Если вы классифицируете две категории, вы можете ввести логарифмический коэффициент вероятностей для каждой категории. Так что если:

log(Pr(cat1) / Pr(cat2)) <=> 0 # positive would favor cat1 and negative cat2

Это равно:

log(Pr(cat1)) - log(Pr(cat2)) <=> 0

И если (как в байесовских классификаторах) категории вероятностей сами являются продуктами вероятностей при заданных условиях:

log(Pr(cat1|cond1)) + ... <=> log(Pr(cat2|cond1)) + ...

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

...