web-dev-qa-db-fra.com

Une explication simple de la classification Naive Bayes

J'ai du mal à comprendre le processus de Naive Bayes et je me demandais si quelqu'un pourrait l'expliquer avec un processus simple, étape par étape, en anglais. Je comprends qu'il faut des probabilités pour comparer les temps passés, mais je n'ai aucune idée du lien entre les données d'apprentissage et le jeu de données réel.

S'il vous plaît, donnez-moi une explication du rôle joué par l'ensemble d'entraînement. Je donne un exemple très simple pour les fruits ici, comme la banane par exemple

training set---
round-red
round-orange
oblong-yellow
round-red

dataset----
round-red
round-orange
round-red
round-orange
oblong-yellow
round-red
round-orange
oblong-yellow
oblong-yellow
round-red
531
Jaggerjack

Si j'ai bien compris votre question, votre question est divisée en deux parties. La première partie nécessite une meilleure compréhension du classifieur Naive Bayes et la deuxième partie étant la confusion entourant l'ensemble de formation.

En général, tous les algorithmes d'apprentissage machine doivent être formés pour des tâches d'apprentissage supervisées telles que la classification, la prévision, etc. ou pour des tâches d'apprentissage non supervisées telles que la mise en grappes.

Au cours de la phase de formation, les algorithmes sont enseignés avec un jeu de données d’entrée particulier (jeu de formation) afin que nous puissions ensuite les tester pour des entrées inconnues (qu’ils n’ont jamais vues auparavant) pour lesquelles ils peuvent classer ou prévoir, etc. (en cas de surveillance supervisée). apprentissage) en fonction de leur apprentissage. C’est sur ce principe que reposent la plupart des techniques d’apprentissage automatique telles que les réseaux de neurones, le SVM, la méthode bayésienne, etc.

Donc, dans un projet d’apprentissage automatique général, vous devez diviser votre jeu d’entrée en un ensemble de développement (ensemble de formation + ensemble de test de développement) et un ensemble de tests (ou ensemble d’évaluation). Rappelez-vous que votre objectif de base est que votre système apprenne et classe les nouvelles entrées qu’ils n’ont jamais vues auparavant dans les ensembles de développement ou de test.

L'ensemble de tests a généralement le même format que l'ensemble d'apprentissage. Cependant, il est très important que le jeu de tests soit distinct du corpus de formation: si nous réutilisions simplement le jeu de formation comme jeu de tests, un modèle qui mémoriserait simplement ses entrées, sans apprendre à généraliser à de nouveaux exemples, serait mal interprété. scores élevés.

En général, par exemple, 70% de nos données peuvent être utilisées en tant que cas d’entraînement. Pensez également à partitionner le jeu d'origine dans les jeux d'apprentissage et de test de manière aléatoire .

J'en viens maintenant à votre autre question sur Naive Bayes.

Pour illustrer le concept de classification naïve de Bayes, considérons l'exemple ci-dessous:

enter image description here

Comme indiqué, les objets peuvent être classés en GREEN ou RED. Notre tâche consiste à classer les nouveaux cas dès qu’ils arrivent, c’est-à-dire à décider à quelle étiquette de classe ils appartiennent, en fonction des objets existants.

Puisqu'il y a deux fois plus d'objets GREEN que RED, il est raisonnable de croire qu'un nouveau cas (qui n'a pas encore été observé) a deux fois plus de chances d'être membre GREEN plutôt que RED. 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 GREEN et RED, et sont souvent utilisées pour prédire les résultats avant qu'ils ne se produisent réellement.

Ainsi, nous pouvons écrire:

Probabilité antérieure de GREEN: number of GREEN objects / total number of objects

Probabilité antérieure de RED: number of RED objects / total number of objects

Comme il y a un total d'objets 60, dont 40 dont _ sont GREEN et 20 RED, nos probabilités antérieures d'appartenance à une classe sont:

Probabilité antérieure pour GREEN: 40 / 60

Probabilité antérieure pour RED: 20 / 60

Après avoir formulé notre probabilité préalable, nous sommes maintenant prêts à classer un nouvel objet (WHITE cercle dans le diagramme ci-dessous). Étant donné que les objets sont bien regroupés, il est raisonnable de supposer que plus les objets GREEN (ou RED) situés au voisinage de X sont nombreux, 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é:

enter image description here

enter image description here

D'après l'illustration ci-dessus, il est clair que la probabilité de X donnée GREEN est inférieure à la probabilité de X donnée RED, puisque le cercle englobe 1GREEN objet et 3RED. Ainsi:

enter image description here

enter image description here

Bien que les probabilités antérieures indiquent que X peut appartenir à GREEN (étant donné qu'il y a deux fois plus de GREEN par rapport à RED), la probabilité indique le contraire. que l'appartenance à la classe de X est RED (étant donné qu'il y a plus d'objets RED à proximité de X que de GREEN). Dans l’analyse bayésienne, la classification finale est produite en combinant les deux sources d’information, c’est-à-dire l’antérieur 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).

enter image description here

Enfin, nous classons X comme RED puisque son appartenance à la classe atteint la plus grande probabilité postérieure.

664
Yavar

Je me rends compte que c'est une vieille question, avec une réponse établie. La raison pour laquelle je poste est que la réponse acceptée comporte de nombreux éléments de k-NN ( k - voisins les plus proches), un algorithme différent.

K-NN et NaiveBayes sont des algorithmes de classification. Conceptuellement, k-NN utilise l'idée de "proximité" pour classifier de nouvelles entités. Dans k-NN, la proximité est modelée avec des idées telles que la distance euclidienne ou la distance cosinus. En revanche, dans NaiveBayes, le concept de "probabilité" est utilisé pour classifier de nouvelles entités.

Puisque la question concerne Naive Bayes, voici comment je décrirais les idées et les étapes à suivre. Je vais essayer de le faire avec le moins d'équations possibles et en anglais simple autant que possible.

Premièrement, la probabilité conditionnelle et la règle de Bayes

Avant que quelqu'un puisse comprendre et apprécier les nuances de Naive Bayes, il doit d'abord connaître quelques concepts connexes, à savoir l'idée de probabilité conditionnelle et la règle de Bayes. (Si vous connaissez ces concepts, passez à la section intitulée Getting to Naive Bayes ')

Probabilité conditionnelle en clair: Quelle est la probabilité que quelque chose se produise, étant donné qu’une autre chose s’est déjà produite.

Supposons qu'il existe un résultat O et des éléments de preuve E. De la manière dont ces probabilités sont définies: La probabilité d'avoir à la fois le résultat O et les éléments de preuve E est: (Probabilité que O se produise) multiplié par le (Probable de E étant donné que O s'est produit)

Un exemple pour comprendre la probabilité conditionnelle:

Disons que nous avons une collection de sénateurs américains. Les sénateurs peuvent être démocrates ou républicains. Ils sont également des hommes ou des femmes.

Si nous choisissons un sénateur complètement au hasard, quelle est la probabilité que cette personne soit une femme démocrate? La probabilité conditionnelle peut nous aider à répondre à cela.

Probabilité de (sénateur démocrate et femme) = Prob (le sénateur est démocrate) multipliée par la probabilité conditionnelle d'être une femme étant donné qu'elle est démocrate.

  P(Democrat & Female) = P(Democrat) * P(Female | Democrat) 

Nous pourrions calculer exactement la même chose, à l'inverse:

  P(Democrat & Female) = P(Female) * P(Democrat | Female) 

Comprendre la règle de Bayes

Conceptuellement, c'est une façon de passer de P (preuve | résultat connu) à P (résultat | preuve connue). Nous savons souvent à quelle fréquence certaines preuves sont observées en fonction d'un résultat connu . Nous devons utiliser ce fait connu pour calculer l'inverse, pour calculer la probabilité que ce résultat se produise , compte tenu des éléments de preuve.

P(Outcome given that we know some Evidence) = P(Evidence given that we know the Outcome) times Prob(Outcome), scaled by the P(Evidence)

L'exemple classique pour comprendre la règle de Bayes:

Probability of Disease D given Test-positive = 

               Prob(Test is positive|Disease) * P(Disease)
     _______________________________________________________________
     (scaled by) Prob(Testing Positive, with or without the disease)

Maintenant, tout cela n'était qu'un préambule pour se rendre à Naive Bayes.

Se rendre chez Naive Bayes

Jusqu'ici, nous n'avons parlé que d'un élément de preuve. En réalité, nous devons prédire un résultat donné preuves multiples. Dans ce cas, le calcul devient très compliqué. Pour contourner cette complication, une approche consiste à "dissocier" plusieurs éléments de preuve et à traiter chacun d'eux de manière indépendante. Cette approche explique pourquoi on l’appelle naïve Bayes.

P(Outcome|Multiple Evidence) = 
P(Evidence1|Outcome) * P(Evidence2|outcome) * ... * P(EvidenceN|outcome) * P(Outcome)
scaled by P(Multiple Evidence)

Beaucoup de gens choisissent de s'en souvenir comme ceci:

                      P(Likelihood of Evidence) * Prior prob of outcome
P(outcome|evidence) = _________________________________________________
                                         P(Evidence)

Remarquez quelques choses à propos de cette équation:

  • Si le Prob (preuve | résultat) est 1, alors nous ne faisons que multiplier par 1.
  • Si le Prob (certaines preuves | résultat) est 0, alors le prob entier. devient 0. Si vous voyez des preuves contradictoires, nous pouvons exclure ce résultat.
  • Puisque nous divisons tout par P (Evidence), nous pouvons même nous en sortir sans le calculer.
  • L'intuition derrière la multiplication par le précédent est telle que nous donnons une probabilité élevée à des résultats plus communs et de faibles probabilités à des résultats improbables. Celles-ci s'appellent également base rates et constituent un moyen de redimensionner nos probabilités prédites.

Comment appliquer Naive Bayes pour prédire un résultat?

Il suffit de lancer la formule ci-dessus pour chaque résultat possible. Puisque nous essayons de classifier , chaque résultat s'appelle un class et il a un class label. notre travail consiste à examiner la preuve, pour examiner la probabilité qu'il s'agisse de cette classe ou de cette classe et attribuer une étiquette à chaque entité. Encore une fois, nous adoptons une approche très simple: la classe ayant la probabilité la plus élevée est déclarée "gagnante" et cette étiquette de classe est affectée à cette combinaison de preuves.

Exemple de fruits

Essayons un exemple pour améliorer notre compréhension: Le PO a demandé un exemple d'identification "fruit".

Disons que nous avons des données sur 1000 fruits. Ils se trouvent être banane, orange ou quelque autre fruit. Nous connaissons 3 caractéristiques de chaque fruit:

  1. Si c'est long
  2. Si c'est doux et
  3. Si sa couleur est jaune.

Ceci est notre "ensemble de formation". Nous allons utiliser cela pour prédire le type de tout nouveau fruit que nous rencontrons.

Type           Long | Not Long || Sweet | Not Sweet || Yellow |Not Yellow|Total
             ___________________________________________________________________
Banana      |  400  |    100   || 350   |    150    ||  450   |  50      |  500
Orange      |    0  |    300   || 150   |    150    ||  300   |   0      |  300
Other Fruit |  100  |    100   || 150   |     50    ||   50   | 150      |  200
            ____________________________________________________________________
Total       |  500  |    500   || 650   |    350    ||  800   | 200      | 1000
             ___________________________________________________________________

Nous pouvons pré-calculer beaucoup de choses sur notre collection de fruits.

Les soi-disant probabilités "antérieures". (Si nous ne connaissions aucun des attributs du fruit, ce serait notre hypothèse.) Ce sont nos base rates.

 P(Banana)      = 0.5 (500/1000)
 P(Orange)      = 0.3
 P(Other Fruit) = 0.2

Probabilité de "preuve"

p(Long)   = 0.5
P(Sweet)  = 0.65
P(Yellow) = 0.8

Probabilité de "vraisemblance"

P(Long|Banana) = 0.8
P(Long|Orange) = 0  [Oranges are never long in all the fruit we have seen.]
 ....

P(Yellow|Other Fruit)     =  50/200 = 0.25
P(Not Yellow|Other Fruit) = 0.75

Étant donné un fruit, comment le classer?

Disons que l'on nous donne les propriétés d'un fruit inconnu et qu'il nous est demandé de le classer. On nous dit que le fruit est long, doux et jaune. Est-ce une banane? Est-ce une orange? Ou est-ce un autre fruit?

Nous pouvons simplement exécuter les chiffres pour chacun des 3 résultats, un par un. Ensuite, nous choisissons la probabilité la plus élevée et "classifions" nos fruits inconnus comme appartenant à la classe présentant la probabilité la plus élevée sur la base de nos preuves antérieures (notre ensemble de formation de 1000 fruits):

P(Banana|Long, Sweet and Yellow) 
      P(Long|Banana) * P(Sweet|Banana) * P(Yellow|Banana) * P(banana)
    = _______________________________________________________________
                      P(Long) * P(Sweet) * P(Yellow)

    = 0.8 * 0.7 * 0.9 * 0.5 / P(evidence)

    = 0.252 / P(evidence)


P(Orange|Long, Sweet and Yellow) = 0


P(Other Fruit|Long, Sweet and Yellow)
      P(Long|Other fruit) * P(Sweet|Other fruit) * P(Yellow|Other fruit) * P(Other Fruit)
    = ____________________________________________________________________________________
                                          P(evidence)

    = (100/200 * 150/200 * 50/200 * 200/1000) / P(evidence)

    = 0.01875 / P(evidence)

De loin (0.252 >> 0.01875), nous classons ce fruit Sweet/Long/Yellow comme pouvant être une banane.

Pourquoi le classificateur Bayes est-il si populaire?

Regardez à quoi ça finit par tomber. Quelques comptages et multiplications. Nous pouvons pré-calculer tous ces termes, ce qui rend la classification facile, rapide et efficace.

Let z = 1 / P(evidence). Maintenant, nous calculons rapidement les trois quantités suivantes.

P(Banana|evidence) = z * Prob(Banana) * Prob(Evidence1|Banana) * Prob(Evidence2|Banana) ...
P(Orange|Evidence) = z * Prob(Orange) * Prob(Evidence1|Orange) * Prob(Evidence2|Orange) ...
P(Other|Evidence)  = z * Prob(Other)  * Prob(Evidence1|Other)  * Prob(Evidence2|Other)  ...

Attribuez le libellé de classe correspondant au numéro le plus élevé et vous avez terminé.

Malgré son nom, Naive Bayes s’avère excellent dans certaines applications. La classification du texte est un domaine dans lequel elle brille vraiment.

J'espère que cela vous aidera à comprendre les concepts de l'algorithme Naive Bayes.

1035
Ram Narasimhan

Naive Bayes: Naive Bayes est placé sous le contrôle du machine learning, qui servait à classifier les ensembles de données. Il est utilisé pour prédire des choses en fonction de ses connaissances antérieures et de ses hypothèses d'indépendance.

Ils l'appellent naïf parce que ce sont des suppositions (cela suppose que toutes les caractéristiques du jeu de données sont d'égale importance et indépendantes) sont vraiment optimistes et rarement vraies dans la plupart des cas. applications du monde réel.

C'est l'algorithme de classification qui prend la décision pour l'ensemble de données inconnu. Il est basé sur théorème de Bayes , qui décrit la probabilité d'un événement en fonction de ses connaissances antérieures.

Le diagramme ci-dessous montre le fonctionnement naïf de Bayes

enter image description here

Formule à prédire NB:

enter image description here

Comment utiliser l'algorithme Naive Bayes?

Prenons un exemple de la façon dont N.B woks

Étape 1: Tout d’abord, nous découvrons la probabilité du tableau qui montre la probabilité d’être oui ou non dans le diagramme ci-dessous. Étape 2: Trouvez la probabilité postérieure de chaque classe.

enter image description here

Problem: Find out the possibility of whether the player plays in Rainy condition?

P(Yes|Rainy) = P(Rainy|Yes) * P(Yes) / P(Rainy)

P(Rainy|Yes) = 2/9 = 0.222
P(Yes) = 9/14 = 0.64
P(Rainy) = 5/14 = 0.36

Now, P(Yes|Rainy) = 0.222*0.64/0.36 = 0.39 which is lower probability which means chances of the match played is low.

Pour plus de références, reportez-vous à ces blog.

Reportez-vous au référentiel GitHub Naive-Bayes-Examples

17
jitsm555

Ram Narasimhan a très bien expliqué le concept ci-dessous. En voici une explication alternative à travers l'exemple de code de Naive Bayes en action
Il utilise un exemple de problème de cette livre à la page 351
Ceci est l'ensemble de données que nous utiliserons
enter image description here
Dans l'ensemble de données ci-dessus, si nous donnons l'hypothèse = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}, quelle est la probabilité qu'il achète ou non un ordinateur.
Le code ci-dessous répond exactement à cette question.
Créez simplement un fichier nommé new_dataset.csv et collez le contenu suivant.

Age,Income,Student,Creadit_Rating,Buys_Computer
<=30,high,no,fair,no
<=30,high,no,excellent,no
31-40,high,no,fair,yes
>40,medium,no,fair,yes
>40,low,yes,fair,yes
>40,low,yes,excellent,no
31-40,low,yes,excellent,yes
<=30,medium,no,fair,no
<=30,low,yes,fair,yes
>40,medium,yes,fair,yes
<=30,medium,yes,excellent,yes
31-40,medium,no,excellent,yes
31-40,high,yes,fair,yes
>40,medium,no,excellent,no

Voici le code dont les commentaires expliquent tout ce que nous faisons ici! [python]

import pandas as pd 
import pprint 

class Classifier():
    data = None
    class_attr = None
    priori = {}
    cp = {}
    hypothesis = None


    def __init__(self,filename=None, class_attr=None ):
        self.data = pd.read_csv(filename, sep=',', header =(0))
        self.class_attr = class_attr

    '''
        probability(class) =    How many  times it appears in cloumn
                             __________________________________________
                                  count of all class attribute
    '''
    def calculate_priori(self):
        class_values = list(set(self.data[self.class_attr]))
        class_data =  list(self.data[self.class_attr])
        for i in class_values:
            self.priori[i]  = class_data.count(i)/float(len(class_data))
        print "Priori Values: ", self.priori

    '''
        Here we calculate the individual probabilites 
        P(outcome|evidence) =   P(Likelihood of Evidence) x Prior prob of outcome
                               ___________________________________________
                                                    P(Evidence)
    '''
    def get_cp(self, attr, attr_type, class_value):
        data_attr = list(self.data[attr])
        class_data = list(self.data[self.class_attr])
        total =1
        for i in range(0, len(data_attr)):
            if class_data[i] == class_value and data_attr[i] == attr_type:
                total+=1
        return total/float(class_data.count(class_value))

    '''
        Here we calculate Likelihood of Evidence and multiple all individual probabilities with priori
        (Outcome|Multiple Evidence) = P(Evidence1|Outcome) x P(Evidence2|outcome) x ... x P(EvidenceN|outcome) x P(Outcome)
        scaled by P(Multiple Evidence)
    '''
    def calculate_conditional_probabilities(self, hypothesis):
        for i in self.priori:
            self.cp[i] = {}
            for j in hypothesis:
                self.cp[i].update({ hypothesis[j]: self.get_cp(j, hypothesis[j], i)})
        print "\nCalculated Conditional Probabilities: \n"
        pprint.pprint(self.cp)

    def classify(self):
        print "Result: "
        for i in self.cp:
            print i, " ==> ", reduce(lambda x, y: x*y, self.cp[i].values())*self.priori[i]

if __== "__main__":
    c = Classifier(filename="new_dataset.csv", class_attr="Buys_Computer" )
    c.calculate_priori()
    c.hypothesis = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

    c.calculate_conditional_probabilities(c.hypothesis)
    c.classify()

sortie:

Priori Values:  {'yes': 0.6428571428571429, 'no': 0.35714285714285715}

Calculated Conditional Probabilities: 

{
 'no': {
        '<=30': 0.8,
        'fair': 0.6, 
        'medium': 0.6, 
        'yes': 0.4
        },
'yes': {
        '<=30': 0.3333333333333333,
        'fair': 0.7777777777777778,
        'medium': 0.5555555555555556,
        'yes': 0.7777777777777778
      }
}

Result: 
yes  ==>  0.0720164609053
no  ==>  0.0411428571429

J'espère que cela aide à mieux comprendre le problème

paix

17

J'essaie d'expliquer la règle de Bayes avec un exemple.

Supposons que vous sachiez que 10% des personnes sont fumeurs. Vous savez également que 90% des fumeurs sont des hommes et 80% d'entre eux ont plus de 20 ans.

Maintenant, vous voyez quelqu'un qui a homme et 15 ans. Vous voulez connaître la chance qu'il soit fumeur:

_ X = smoker | he is a man and under 20
_

Puisque vous savez que 10% des fumeurs sont des fumeurs, votre estimation initiale est de 10% ( de probabilité antérieure , sans rien connaître de la personne), mais l'autre - éléments de preuve (qu'il est un homme et qu'il a 15 ans) peut affecter cette hypothèse.

Chaque preuve peut augmenter ou diminuer cette chance. Par exemple, le fait qu'il s'agisse d'un homme peut augmente les chances, à condition que ce pourcentage (d'être un homme) parmi les non-fumeurs soit inférieur, par exemple de 40%. En d'autres termes, être un homme doit être un bon indicateur du fait de fumer plutôt que de ne pas fumer.

Nous pouvons montrer cette contribution d'une autre manière. Pour chaque caractéristique, vous devez comparer la commune (probabilité) de cette caractéristique (f) seule avec sa commune dans les conditions données. (P(f) vs. P(f | x). Par exemple, si nous savons que la probabilité d'être un homme est de 90% dans une société et que 90% des fumeurs sont également des hommes, le fait de savoir que quelqu'un est un homme ne nous aide pas _(10% * (90% / 90%) = 10%)_. Si les hommes représentent 40% de la société mais 90% des fumeurs, le fait de savoir que quelqu'un est un homme augmente les risques de fumer _(10% * (90% / 40%) = 22.5% )_. De la même manière, si la probabilité d'être un homme était: 95% dans la société, alors indépendamment du fait que le pourcentage d'hommes fumeurs est élevé (90%)! La preuve qu'un homme est un homme diminue ses chances de fumer! _(10% * (90% / 95%) = 9.5%)_.

Nous avons donc:

_P(X) = 
P(smoker)* 
(P(being a man | smoker)/P(being a man))*
(P(under 20 | smoker)/ P(under 20))
_

Notez que dans cette formule, nous supposons que être un homme et avoir moins de 20 ans sont des entités indépendantes, donc nous les multiplions. Cela signifie que le fait de savoir qu'une personne de moins de 20 ans n'a aucun effet sur devinant qu'il est homme ou femme. Mais ce n'est peut-être pas vrai, par exemple, dans la société, la plupart des adolescents sont des hommes ...

Pour utiliser cette formule dans un classificateur

Le classificateur est donné avec certaines caractéristiques (être un homme et avoir moins de 20 ans) et il doit décider s’il est fumeur ou non. Il utilise la formule ci-dessus pour trouver cela. Pour fournir les probabilités requises (90%, 10%, 80% ...), il utilise l'ensemble de formation. Par exemple, il compte les personnes qui fument dans l’entraînement et découvrent qu’elles représentent 10% de l’échantillon. Ensuite, pour les fumeurs, contrôle combien sont des hommes ou des femmes .... combien ont plus de 20 ans ou moins de 20 ans ....

13
Ahmad