Classificateur Naive-Bayes pour les groupes inégaux

8

J'utilise un classificateur bayésien naïf pour classer entre deux groupes de données. Un groupe de données est beaucoup plus grand que l'autre (plus de 4 fois). J'utilise la probabilité antérieure de chaque groupe dans le classificateur.

Le problème est que le résultat que j'obtiens a un taux de vrai positif de 0% et un taux de faux positif de 0%. J'ai obtenu les mêmes résultats lorsque j'ai réglé l'avant à 0,5 et 0,5.

Comment puis-je fixer mon seuil à quelque chose de mieux pour obtenir des résultats plus équilibrés?

J'ai eu un problème similaire lors de l'utilisation du classificateur de régression logistique. Je l'ai résolu en soustrayant le terme précédent du biais.

Lorsque j'utilise Fisher Linear Discriminant sur ces données, j'obtiens de bons résultats avec le seuil défini au milieu.

Je suppose qu'il existe une solution commune à ce problème, je ne l'ai tout simplement pas trouvée.

MISE À JOUR: Je viens de remarquer que moi, le classificateur est trop adapté. La performance sur l'ensemble d'entraînement est parfaite (100% correcte).

Si j'utilise des groupes égaux, le classificateur commence également à se classer dans le "petit" groupe, mais les performances sont plutôt mauvaises (pires que FLD ou LR).

UPDATE2: Je pense que le problème était que j'utilisais une matrice de covariance complète. Courir avec une matrice de covariance diagonale m'a donné des résultats plus «équilibrés».

Ran
la source
0% vrai positif et 0% faux positif? Cela doit être de tout mettre dans l'autre groupe, alors ... essayez de fixer votre priorité à 80% pour le groupe "positif". Mais d'abord, vérifiez que vous ne faites pas d'erreur quelque part dans le code ...
jbowman
Peut-être que le prieur est trop grand / petit? (quelques problèmes avec l'arithmétique
Dov

Réponses:

7

Assigner tous les modèles à la classe négative n'est certainement pas un "résultat étrange". Il se pourrait que le classificateur optimal de Bayes classe toujours tous les modèles comme appartenant à la classe majoritaire, auquel cas votre classificateur fait exactement ce qu'il doit faire. Si la densité des motifs appartenant à la classe positive ne dépasse jamais la densité des motifs appartenant à la classe négative, alors la classe négative est plus probable quelles que soient les valeurs d'attribut.

La chose à faire dans de telles circonstances est de considérer l'importance relative des erreurs faussement positives et fausses négatives, il est rare en pratique que les coûts des deux types d'erreurs soient les mêmes. Déterminez donc la perte pour les erreurs faussement positives et fausses négatives et tenez-en compte dans la définition de la probabilité de seuil (des coûts de classification erronés différents équivalent à changer les probabilités antérieures, donc c'est facile à mettre en œuvre pour les Bayes naïfs). Je recommanderais de régler les priorités pour minimiser l'estimation de validation croisée de la perte (en tenant compte de vos coûts de classification erronée inégaux).

Si vos coûts de classification erronée sont égaux et que votre formation est antérieure aux conditions opérationnelles, en supposant que votre mise en œuvre est correcte, il est possible que vous disposiez déjà du meilleur classificateur NB.

Dikran Marsupial
la source
vérifiez ma mise à jour s'il vous plaît. Mon classificateur est trop adapté. de toute façon, si j'utilise des groupes égaux, le classificateur commence à se comporter mieux, mais les performances sont toujours faibles .. la modification du seuil (priors) n'affecte pas du tout les performances lorsqu'un groupe est beaucoup plus grand. merci
Ran
1
@Ran Je ne peux pas me débarrasser du sentiment qu'il manque quelque chose ici. Pouvez-vous s'il vous plaît rapporter l'AUC de chaque classificateur? 2. Combien d'instances positives / négatives avez-vous par classe? 3. Comment avez-vous validé le classificateur? qui-k-fold-cv? toilette ? 3. Notez que la nature de NB est de créer des probabilités extrêmes p (classe | x) proches de 0 ou 1, donc il faut trouver le meilleur seuil de décision, c'est-à-dire t pour que p (classe = 1 | x)> t => classe 1, sinon classe 0. Trouver un tel seuil de décision équivaut à ajuster les priors.
steffen
@Ran changer les prieurs doit affecter les performances;). Si de petits changements ne vous aident pas, essayez des extrêmes.
steffen
2
@Ran, il est difficile de déterminer quel est le problème sans disposer d'informations supplémentaires sur la taille de l'ensemble de formation, la nature des attributs, etc. , comme si cela se produisait, la sortie sera nulle quelles que soient les valeurs des autres attributs. Les probabilités pour la classe minoritaire sont-elles toujours exactement nulles? Si tel est le cas, cela peut être le problème, auquel cas l'utilisation de la correction de Laplace pour estimer les probabilités conditionnelles pourrait aider.
Dikran Marsupial
0

Agrandissez le plus petit groupe de données pour l'adapter au grand groupe par calcul. Il étirera les données du plus petit groupe, mais il permettra un calcul plus égal.

Si vous obtenez toujours des résultats étranges comme vous le faites actuellement, vérifiez toute votre implémentation du début pour rechercher une erreur (probablement simple).


la source
que voulez-vous dire par "Agrandir les petites données ... par calcul"? pouvez-vous expliquer davantage?
Dov
tout classer comme appartenant à la classe négative n'est pas un résultat étrange, c'est parfois la bonne chose à faire parce que la densité des modèles négatifs dépasse toujours la densité des modèles positifs partout.
Dikran Marsupial