Comprendre les Naives Bayes


47

Extrait de StatSoft, Inc. (2013), Manuel de statistiques électroniques , "Naive Bayes Classifier" :

entrez la description de l'image ici

Pour illustrer le concept de classification naïve de Bayes, considérons l'exemple présenté dans l'illustration ci-dessus. Comme indiqué, les objets peuvent être classés en VERT ou en ROUGE. Ma tâche consiste à classer les nouveaux cas au fur et à mesure qu'ils arrivent, c'est-à-dire à décider à quelle étiquette de classe ils appartiennent, en fonction des objets existants.

Comme il y a deux fois plus d'objets VERT que de ROUGE, il est raisonnable de croire qu'un nouveau cas (qui n'a pas encore été observé) a deux fois plus de chances d'avoir une appartenance VERTE plutôt que ROUGE. Dans l'analyse bayésienne, cette croyance est connue sous le nom de probabilité antérieure. Les probabilités antérieures sont basées sur l'expérience antérieure, dans ce cas le pourcentage d'objets VERT et ROUGE, et sont souvent utilisées pour prédire les résultats avant qu'ils ne se produisent réellement.

Ainsi, nous pouvons écrire:

entrez la description de l'image ici

Puisqu'il y a un total de 60 objets, dont 40 sont VERT et 20 ROUGES, nos probabilités antérieures d'appartenance à une classe sont:

entrez la description de l'image ici entrez la description de l'image ici

Après avoir formulé notre probabilité préalable, nous sommes maintenant prêts à classer un nouvel objet (cercle BLANC). Étant donné que les objets sont bien regroupés, il est raisonnable de supposer que plus il y a d'objets VERT (ou ROUGE) au voisinage de X, plus il est probable que les nouveaux cas appartiennent à cette couleur particulière. Pour mesurer cette probabilité, on trace un cercle autour de X qui comprend un nombre (à choisir a priori) de points indépendamment de leur libellé de classe. Ensuite, nous calculons le nombre de points dans le cercle appartenant à chaque étiquette de classe. À partir de cela, nous calculons la probabilité:

entrez la description de l'image ici

D'après l'illustration ci-dessus, il est clair que la probabilité que X soit donnée en vert est inférieure à la probabilité en X donnée en rouge, car le cercle comprend 1 objet vert et 3 objets rouges. Ainsi:

entrez la description de l'image ici

entrez la description de l'image ici

Bien que les probabilités antérieures indiquent que X peut appartenir à GREEN (étant donné qu'il existe deux fois plus de GREEN par rapport à RED), la probabilité indique le contraire. que l'appartenance à la classe de X est ROUGE (étant donné qu'il y a plus d'objets ROUGES dans le voisinage de X que VERT). Dans l'analyse bayésienne, la classification finale est produite en combinant les deux sources d'informations, à savoir l'antériorité et la vraisemblance, pour former une probabilité postérieure à l'aide de la règle dite de Bayes (nommée d'après le révérend Thomas Bayes 1702-1761).

entrez la description de l'image ici

Enfin, nous classons X en tant que RED car son appartenance à une classe atteint la plus grande probabilité postérieure.

C’est là que la difficulté de ma compréhension mathématique entre en jeu.

entrez la description de l'image ici

p (Cj | x1, x2, x ..., xd) est la probabilité postérieure d'appartenance à une classe, c'est-à-dire la probabilité que X appartienne à Cj mais pourquoi l'écrire comme ceci?

Calculer la vraisemblance?

entrez la description de l'image ici

Probabilité postérieure?

entrez la description de l'image ici

Je n'ai jamais pris de maths, mais ma compréhension des bayes naïfs est bonne, je pense que le fait de parler de ces méthodes décomposées me perturbe. Quelqu'un pourrait-il aider à visualiser ces méthodes et à rédiger le calcul de manière compréhensible?


12
(+1) J'admire la manière très prudente et claire avec laquelle vous avez posé votre question.
rolando2

2
@ rolando2: tous les chiffres et presque tout le texte de cette question proviennent de statsoft.com/textbook/naive-bayes-classifier
Franck Dernoncourt

Veuillez éditer ce message pour attribuer clairement du matériel provenant d’autres sources, conformément à Comment référencer du matériel écrit par d’autres .
Scortchi - Réintégrer Monica

L’attribution correcte de devis directs a toujours été une exigence sur les sites Stack Exchange. Quoi qu'il en soit, l'omission est facilement corrigée; Et je l'ai fait. Il n'est pas nécessaire de supprimer votre compte - veuillez reconsidérer.
Scortchi

Réponses:


50

Je vais parcourir tout le processus Naive Bayes à partir de zéro, car je ne vois pas très bien où vous allez être suspendu.

Nous voulons trouver la probabilité qu'un nouvel exemple appartienne à chaque classe: ). Nous calculons ensuite cette probabilité pour chaque classe et choisissons la classe la plus probable. Le problème est que nous n'avons généralement pas ces probabilités. Cependant, le théorème de Bayes nous permet de réécrire cette équation sous une forme plus facile à gérer.P(class|feature1,feature2,...,featuren

Le statut de Bayes est simplement ou en termes de notre problème:

P(A|B)=P(B|A)P(A)P(B)
P(class|features)=P(features|class)P(class)P(features)

Nous pouvons simplifier cela en supprimant . Nous pouvons faire cela parce que nous allons classer pour chaque valeur de ; sera la même à chaque fois - cela ne dépend pas de la . Cela nous laisse avec P(features)P(class|features)classP(features)class

P(class|features)P(features|class)P(class)

Les probabilités antérieures, , peuvent être calculées comme décrit dans votre question.P(class)

Cela laisse . Nous voulons éliminer la probabilité commune massive (et probablement très . Si chaque fonctionnalité est indépendante, alors Même si elles ne sont pas réellement indépendantes, nous pouvons supposer qu'elles le sont (c'est le " naïf "partie de naïf Bayes). Personnellement, j'estime qu'il est plus facile de penser à cela pour des variables discrètes (c'est-à-dire catégoriques), aussi utilisons une version légèrement différente de votre exemple. Ici, j'ai divisé chaque dimension d'objet en deux variables catégoriques.P(features|class)P(feature1,feature2,...,featuren|class)

P(feature1,feature2,...,featuren|class)=iP(featurei|class)

Exemple de données discrètes.

Exemple: Former le classificateur

Pour former le classificateur, nous comptons divers sous-ensembles de points et les utilisons pour calculer les probabilités antérieures et conditionnelles.

Les a priori sont triviaux: il y a soixante points au total, quarante sont verts et vingt rouges. Ainsi,

P(class=green)=4060=2/3 and P(class=red)=2060=1/3

Ensuite, nous devons calculer les probabilités conditionnelles de chaque valeur de fonction pour une classe. Ici, il existe deux fonctionnalités: et , chacune prenant l'une des deux valeurs (A ou B pour l'une, X ou Y pour l'autre). Nous devons donc connaître les éléments suivants:feature1feature2

  • P(feature1=A|class=red)
  • P(feature1=B|class=red)
  • P(feature1=A|class=green)
  • P(feature1=B|class=green)
  • P(feature2=X|class=red)
  • P(feature2=Y|class=red)
  • P(feature2=X|class=green)
  • P(feature2=Y|class=green)
  • (au cas où ce ne serait pas évident, c'est toutes les paires possibles d'entité-valeur et de classe)

Celles-ci sont faciles à calculer en comptant et en divisant aussi. Par exemple, pour , nous regardons uniquement les points rouges et comptons leur nombre dans la région 'A' pour . Il y a vingt points rouges, qui sont tous dans la région 'A', donc . Aucun des points rouges ne se trouve dans la région B, donc . Ensuite, nous faisons la même chose, mais considérons seulement les points verts. Cela nous donne et . Nous répétons ce processus pour , pour la table de probabilité. En supposant que j'ai compté correctement, nous obtenonsP(feature1=A|class=red)feature1P(feature1=A|class=red)=20/20=1P(feature1|class=red)=0/20=0P(feature1=A|class=green)=5/40=1/8P(feature1=B|class=green)=35/40=7/8feature2

  • P(feature1=A|class=red)=1
  • P(feature1=B|class=red)=0
  • P(feature1=A|class=green)=1/8
  • P(feature1=B|class=green)=7/8
  • P(feature2=X|class=red)=3/10
  • P(feature2=Y|class=red)=7/10
  • P(feature2=X|class=green)=8/10
  • P(feature2=Y|class=green)=2/10

Ces dix probabilités (les deux a priori et les huit conditions) sont notre modèle

Classer un nouvel exemple

Classons le point blanc de votre exemple. C'est dans la région "A" pour et la région "Y" pour . Nous voulons trouver la probabilité que cela soit dans chaque classe. Commençons par le rouge. En utilisant la formule ci-dessus, nous savons que: Subbing dans les probabilités de la table, nous obtenonsfeature1feature2

P(class=red|example)P(class=red)P(feature1=A|class=red)P(feature2=Y|class=red)

P(class=red|example)131710=730
On fait de même pour le vert:
P(class=green|example)P(class=green)P(feature1=A|class=green)P(feature2=Y|class=green)

La sous-utilisation de ces valeurs nous donne 0 ( ). Enfin, nous examinons quelle classe nous a donné la probabilité la plus élevée. Dans ce cas, il s’agit clairement de la classe rouge, c’est pourquoi nous assignons le point.2/302/10

Remarques

Dans votre exemple d'origine, les fonctionnalités sont continues. Dans ce cas, vous devez trouver un moyen d’affecter P (feature = value | class) à chaque classe. Vous pourriez alors envisager de vous adapter à une distribution de probabilité connue (par exemple une gaussienne). Pendant la formation, vous trouverez la moyenne et la variance pour chaque classe le long de chaque dimension de la fonction. Pour classer un point, vous devez trouver en insérant la moyenne et la variance appropriées pour chaque classe. D'autres distributions pourraient être plus appropriées, en fonction des particularités de vos données, mais un gaussien serait un bon point de départ.P(feature=value|class)

Je ne connais pas trop le jeu de données DARPA, mais vous feriez essentiellement la même chose. Vous finirez probablement par calculer quelque chose comme P (attaque = VRAI | service = doigt), P (attaque = faux | service = doigt), P (attaque = VRAI | service = ftp), puis vous les combinerez dans le même manière que l'exemple. En remarque, une partie de l'astuce ici consiste à proposer de bonnes fonctionnalités. L'IP source, par exemple, va probablement être désespérément maigre - vous n'aurez probablement qu'un ou deux exemples pour une IP donnée. Vous feriez beaucoup mieux si vous géolocalisez l'adresse IP et utilisez "Source_in_same_building_as_dest (true / false)" ou quelque chose comme fonctionnalité.

J'espère que ça aide plus. Si quelque chose nécessite une clarification, je serais heureux d'essayer à nouveau!


3
Sûr. Si ça vous va, je vais modifier ma réponse pour qu'il y ait plus de place (et je peux faire des choses en LaTex).
Matt Krause

1
J'ai élargi la formation et les pièces d'essai et les ai transformées en leur propre section. Les deux premiers paragraphes sont les mêmes ...
Matt Krause

2
Matt, c'est beaucoup plus clair que n'importe quelle définition de Naive Bayes que j'ai trouvée dans les manuels scolaires. C’est probablement la meilleure réponse à toute question que j’ai vue jusqu’à présent sur ce site.
Zhubarb

@Berkan, merci; c'est très gentil de votre part (bien qu'il y ait beaucoup d'autres bonnes réponses aussi!) Si vous avez des suggestions, je serais ravi d'essayer de les aborder!
Matt Krause

+ 1 et stackoverflow.com/questions/10059594/… où il y a une explication similaire
Drey

6

Simplifiant la notation avec désignant les données, nous voulons trouver lequel des différents est le plus grand. Maintenant, la formule de Bayes donne où le dénominateur sur le le droit est le même pour tous . Si nous voulons trouver lequel de , est le plus grand, nous pouvons, bien sûr, calculer chaque et comparer les valeurs. Mais notons que les comparaisons ne sont pas vraiment affectées par la valeur de qui est la même dans tous les cas. On pourrait également bien calculer tous lesDP(CjD)

P(CjD)=P(DCj)P(Cj)P(D), j=1,2,
jP(C1D)P(C2D),P(CjD)P(D)P(DCj)P(Cj) et comparez (c’est-à-dire sans vous soucier de diviser chaque par avant les comparaisons), et le même sera choisi comme ayant la plus grande probabilité postérieure. En d'autres termes, la probabilité postérieure est proportionnelle à la probabilité fois la probabilité antérieure Enfin, lorsque la donnée est une collection d’observations (conditionnellement) indépendantes étant donné , on a que P ( D ) C j P ( C jD ) P ( D C j )P(DCj)P(Cj)P(D)CjP(CjD)P(DCj) P(Cj)
P(CjD)P(DCj)P(Cj).
D(x1,x2,,xd)Cj)
P(DCj)=P(x1,x2,,xdCj)=P(x1Cj)P(x2Cj)P(xdCj)=1=1dP(xiCj)

1

L'hypothèse principale derrière le modèle bayésien naïf est que chaque entité (x_i) est conditionnellement indépendante de toutes les autres entités de la classe. Cette hypothèse est ce qui nous permet d’écrire la probabilité comme un simple produit (comme vous l’avez montré).

C’est aussi ce qui aide le modèle bayésien naïf à généraliser dans la pratique. Considérons la phase de formation: si nous ne prenions pas cette hypothèse, l'apprentissage impliquerait donc l'estimation d'une distribution compliquée de hautes dimensions: p (x1, x2, ..., xn, c) dans laquelle toutes les caractéristiques sont distribuées conjointement. Au lieu de cela, nous pouvons nous entraîner en estimant p (x1, c), p (x2, c), ..., p (xn, c), puisqu’en connaissant la valeur c, les valeurs de toutes les autres caractéristiques sont sans importance (elles fournissent aucune information supplémentaire sur x_i).

Je ne connais pas un bon moyen de visualiser cela (en dehors de la notation de modèle graphique standard), mais pour le rendre plus concret, vous pouvez écrire du code pour apprendre un modèle Naive Bayes ( vous pouvez récupérer des exemples de données ici ). Former et tester. Supprimez maintenant l'hypothèse d'indépendance conditionnelle et modifiez le code. Former, tester et comparer au modèle précédent.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.