Extrait de StatSoft, Inc. (2013), Manuel de statistiques électroniques , "Naive Bayes Classifier" :
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:
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:
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é:
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:
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).
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.
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?
Probabilité postérieure?
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?
Réponses:
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 avecP(features) P(class|features) class P(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: 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:feature1 feature2
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) feature1 P(feature1=A|class=red)=20/20=1 P(feature1|class=red)=0/20=0 P(feature1=A|class=green)=5/40=1/8 P(feature1=B|class=green)=35/40=7/8 feature2
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 obtenonsfeature1 feature2 P(class=red|example)∝P(class=red)⋅P(feature1=A|class=red)⋅P(feature2=Y|class=red)
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/3⋅0⋅2/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!
la source
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 lesD P(Cj∣D)
la source
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.
la source