Я строю текстовый классификатор Naive Bayes с нуля на Python, и я знаю, что, столкнувшись с продуктом очень малых вероятностей, использование логарифма над вероятностями является хорошим выбор.Усложнение с использованием логарифмических вероятностей - классификатор текста Naive Bayes
Проблема в том, что математическая функция, которую я использую, имеет суммирование по продукту этих чрезвычайно малых вероятностей.
Чтобы быть конкретным, я пытаюсь вычислить полные вероятности слов, учитывая компонент смеси (класс) по всем классам.
Непосредственно добавление журналов этих полных вероятностей неверно, поскольку журнал суммы не равен сумме журналов.
Чтобы привести пример, скажем, что у меня есть 3 класса, 2000 слов и 50 документов. Тогда у меня есть матрица вероятности слов, называемая wordprob с 2000 строк и 3 столбца.
Алгоритм для полной вероятности слов в этом примере будет выглядеть следующим образом:
sum = 0
for j in range(0,3):
prob_product = 1
for i in words: #just the index of words from my vocabulary in this document
prob_product = prob_product*wordprob[i,j]
sum = sum + prob_product
Что в конечном итоге происходит, что prob_product становится равной 0 на многих итерации из-за многие малые вероятности умножая друг с другом.
Поскольку я не могу легко решить это с помощью журналов (из-за суммирования спереди), я совершенно не знаю.
Любая помощь будет очень признательна.
Для этой цели NumPy имеет функцию '' logaddexp' '(http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.logaddexp.html). –
(И 'scipy.misc.logsumexp' также может представлять интерес.) –