J'implémente un algorithme Naive Bayes pour la catégorisation de texte avec lissage laplacien. Le problème que j'ai est que la probabilité approche de zéro parce que je multiplie de nombreuses petites fractions. Par conséquent, la probabilité donne finalement zéro. En effet, il y a plusieurs mots dans les documents et les ensembles de formation.
Pour cette raison, je ne suis pas en mesure de classer les textes. Existe-t-il un moyen de contourner ce problème? Suis-je en train de faire quelque chose de mal dans ma mise en œuvre?
Réponses:
L'astuce habituelle pour éviter ce sous-dépassement est de calculer avec des logarithmes, en utilisant l'identité Autrement dit, au lieu d'utiliser des probabilités, vous utilisez leurs logarithmes. Au lieu de les multiplier, vous les ajoutez.
Une autre approche, moins courante, consiste à normaliser le produit manuellement. Au lieu de conserver un seul nombre à virgule flottante , vous conservez un nombre à virgule flottante (disons) et un exposant négatif tel que . Après chaque opération, vous normalisez le nombre résultant.p x p = p 0 2 xp0∈[1,2) x p=p02x
la source