Czy robienie logów wektoryzujących powtarzające się mnożenie jest właściwym podejściem?

Niedawno napisałem implementację Naive Bayes, aby klasyfikować przykłady do jednej z 5 różnych grup. Liczba funkcji n była bardzo duża, a każda funkcja mogła być włączona (1) lub wyłączona (0). Korzystając z zestawu treningowego, oszacowałem macierz P 5 × n prawdopodobieństw warunkowych dla każdej grupy Gi przeciwko każdej funkcji Fj, dla 1≤i≤5, 1≤j≤n, tak że komórka (i, j) = P (Gi= 1 | Fj= 1). (Ignoruję prawdopodobieństwa P (Gi= 1 | Fj= 0), ponieważ nie są one istotne dla tej dyskusji.)

Chciałem zrobić, biorąc pod uwagę nowy przykład E, wektor 1 × n, pomnóżmy razem prawdopodobieństwa warunkowe z macierzy P odpowiadające cechom, które były włączone w nowym przykładzie. Miałem dwie wątpliwości w tym:

bardzo duża liczba funkcji oznacza, że ​​pętla będzie bardzo wolnapowtarzające się mnożenie może prowadzić do utraty dokładności

Zrobiłem dziennik P, L = log (P), a następnie wykonałem mnożenie macierzy E L '. Mnożenie daje wynik 1 × 5, a maksimum wyniku wskazuje, która grupa, przyjmując prawdopodobieństwa wcześniejsze, jest równa. Rozwiązuje to problem prędkości poprzez wektoryzację i problem dokładności, biorąc logi (i oczywiście, logi przekształcają mnożenie na dodatkowe). Kolejną zaletą jest to, że E L 'będzie działać dla zestawu przykładów treningowych, gdzie E jest macierzą, a nie wektorem.

Moje pytanie brzmi, czy przyjmowanie takich logów jest podejściem rozsądnym / standardowym? Wygląda na to, że może to być oczywiste podejście „101”, ale mam ograniczone doświadczenie we wdrażaniu takich algorytmów, więc doceniłbym opinie osób z większym doświadczeniem.

Dla odniesienia, w podejściu Naive Bayes, twierdzenie Bayesa podaje prawdopodobieństwo bycia w grupie g uzależnione od cechF= f tak jak

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

Rozszerzenie wektora funkcjiF w F1..n daje

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

Zastosowanie naiwnego założenia niezależnych funkcji

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

Mianownik można upuścić, ponieważ jest taki sam dla wszystkich g, więc mamy

P (G = g | F1= f1, F2= f2... Fn= fn) ∝ P (F1= f1| G = g) P (F2= f2| G = g) ... P (Fn= fn| G = g) P (G = g)

Tutaj P (G = g) jest prawdopodobieństwem wcześniejszym.

questionAnswers(1)

yourAnswerToTheQuestion