Является ли использование логов для векторизации повторного умножения правильным подходом?

Недавно я написал реализацию Наивного Байеса, чтобы классифицировать примеры в одну из 5 разных групп. Число объектов n было очень большим, и каждый объект мог быть включен (1) или выключен (0). Используя тренировочный набор, я оценил 5 × n матрица P условных вероятностей для каждой группы Gi против каждой функции Fjдля 1≤i≤5, 1≤j≤n, так что ячейка (i, j) = P (Gi= 1 | Fj= 1). (Я'м игнорируя вероятности P (Gi= 1 | Fj= 0) как онине имеет отношения к этому обсуждению.)

Что я хотел сделать, это, учитывая новый пример E, 1 × n вектора, умножьте вместе условные вероятности из матрицы P, соответствующие признакам, которые были включены в новом примере. У меня было две проблемы в этом:

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

Я взял журнал P, L = log (P), а затем произвел умножение матрицы E L '., Умножение дает 1 × 5 результат и максимум результата указывают, какая группа, предполагая, что предыдущие вероятности примерно равны. Это решает проблему скорости посредством векторизации и проблемы точности, беря логи (и, конечно, взятие логов преобразует умножение в сложение). Еще одним преимуществом является то, что E L ' будет работать для набора обучающих примеров, где E является матрицей, а не вектором.

У меня такой вопрос: разумно ли использовать журналы подобным образом? Кажется, что это может быть очевидным "101" подход, но у меня ограниченный опыт реализации таких алгоритмов, поэтому я был бы признателен за отзывы тех, у кого больше опыта.

Для справки, в наивном байесовском подходе теорема Байеса дает вероятность оказаться в группе g в зависимости от особенностей F = f как

P (G = g | F = f ) = P (F = f| G = g) P (G = g) / P (F = f)

Расширяя вектор функций F в F1..n дает

Р (G = | F1= f1, F2= f2... Fn= фн) = P (F1= f1, F2= f2... Fn= фн| G = g) P (G = g) / P (F = f)

Применяя Наивное допущение о независимых особенностях

Р (G = | F1= f1, F2= f2... Fn= фн) = P (F1= f1| G = g) P (F2= f2| G = g) ... P (Fn= фн| G = g) P (G = g) / P (F = f)

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

Р (G = | F1= f1, F2= f2... Fn= фн) ∝ Р (F1= f1| G = g) P (F2= f2| G = g) ... P (Fn= фн| G = G) P (G = г)

Здесь P (G = g) - априорная вероятность.

Ответы на вопрос(1)

Ваш ответ на вопрос