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ściZrobił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.