Question Une explication simple de la classification de Naive Bayes


J'ai du mal à comprendre le processus de Naive Bayes, et je me demandais si quelqu'un pouvait l'expliquer avec un processus simple en pas à pas en anglais. Je crois comprendre que cela nécessite des comparaisons par période, mais je n'ai aucune idée de la manière dont les données de formation sont liées au jeu de données réel.

Veuillez me donner une explication sur le rôle joué par l'entraînement. Je donne ici un exemple très simple de fruits, 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

482
2018-04-08 00:56


origine


Réponses:


Votre question, si je comprends bien, est divisée en deux parties. Une des choses est que vous avez besoin de plus de compréhension pour le classificateur Naive Bayes et la seconde est la confusion entourant l'ensemble de formation.

En général, tous les algorithmes d'apprentissage automatique doivent être formés pour des tâches d'apprentissage supervisées telles que la classification, la prédiction, etc. ou pour des tâches d'apprentissage non supervisées telles que le regroupement.

En s'entraînant, cela signifie les former à des intrants particuliers, de manière à pouvoir les tester ultérieurement pour des informations inconnues (qu'ils n'avaient jamais vues auparavant) pour lesquelles ils peuvent classer ou prédire, etc. C'est sur cela que reposent la plupart des techniques d'apprentissage automatique telles que les réseaux de neurones, les SVM, les bayésiens, etc.

Ainsi, dans un projet Machine Learning général, vous devez diviser votre jeu d’entrée en un jeu de développement (jeu de formation + jeu de test de développement) et un jeu de tests (ou jeu d’évaluation). Rappelez-vous que votre objectif de base serait que votre système apprenne et classifie les nouvelles entrées qu’il n’a jamais vues auparavant dans un jeu de développement ou un jeu de tests.

L'ensemble de test 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éutilisé l'ensemble de formation comme ensemble de test, puis un modèle qui mémorisait simplement ses entrées, sans apprendre à généraliser à de nouveaux exemples, recevrait des scores élevés trompeurs.

En général, par exemple, 70% peuvent être des cas de formation. Rappelez-vous également de partitionner le jeu d’origine dans les jeux d’entraînement et de test. au hasard.

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

Source par exemple ci-dessous: http://www.statsoft.com/textbook/naive-bayes-classifier

Pour démontrer le concept de classification naïve bayésienne, prenons l'exemple ci-dessous:

enter image description here

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

Comme il y en a deux fois plus GREEN des objets comme 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 appelée probabilité antérieure. Les probabilités antérieures sont basées sur l'expérience antérieure, dans ce cas le pourcentage de GREEN et RED objets, et souvent utilisés 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 de 60 objets, 40 dont GREEN et 20 RED, nos probabilités antérieures d'appartenance à un groupe sont:

Probabilité antérieure pour GREEN: 40 / 60

Probabilité antérieure pour RED: 20 / 60

Ayant formulé notre probabilité antérieure, nous sommes maintenant prêts à classer un nouvel objet (WHITE encerclez dans le diagramme ci-dessous). Puisque les objets sont bien groupés, il est raisonnable de supposer que plus GREEN (ou RED) objets à proximité de X, plus il est probable que les nouveaux cas appartiennent à cette couleur particulière. Pour mesurer cette vraisemblance, nous dessinons un cercle autour de X qui englobe un nombre (à choisir a priori) de points indépendamment de leurs étiquettes 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é GREEN est plus petit que la probabilité de X donné RED, puisque le cercle comprend 1  GREEN objet et 3  RED ceux 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 en a deux fois plus GREEN par rapport à RED) la vraisemblance indique le contraire; que l'appartenance à la classe de X est RED (étant donné qu'il y a plus de RED objets à proximité de X que GREEN). Dans l'analyse bayésienne, la classification finale est produite en combinant les deux sources d'information, à savoir le prieur et la vraisemblance, pour former une probabilité a posteriori en utilisant la règle dite de Bayes (du nom du 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é a posteriori.


639
2018-04-08 12:13



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

Les deux k-NN et NaiveBayes sont des algorithmes de classification. Conceptuellement, k-NN utilise l'idée de «proximité» pour classer de nouvelles entités. Dans k-NN, la proximité est modélisé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 classer de nouvelles entités.

Puisque la question concerne Naive Bayes, voici comment je décrirais les idées et les étapes à quelqu'un. Je vais essayer de le faire avec autant d’équations et d’anglais 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, ils doivent 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 Se rendre à Naive Bayes)

Probabilite conditionnelle en anglais clair: Quelle est la probabilité que quelque chose se passe, étant donné que quelque chose d'autreest déjà arrivé.

Disons qu'il y a un résultat O. Et quelques éléments de preuve E. De la façon dont ces probabilités sont définies: La probabilité d'avoir tous les deux les résultats O et E sont:    (Probabilité de O survenant) multiplié par le (Prob de E étant donné que O est arrivé)

Un exemple pour comprendre la probabilité conditionnelle:

Disons que nous avons une collection de sénateurs américains. Les sénateurs pourraient être démocrates ou républicains. Ils sont aussi masculins ou féminins.

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 à y répondre.

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

  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 un moyen de passer de P (Evidence | Known Outcome) à P (Outcome | Evidence Connue). Souvent, nous savons à quelle fréquence des preuves particulières sont observées, compte tenu d'un résultat connu. Nous devons utiliser ce fait connu pour calculer l'inverse, pour calculer la chance de cette résultat qui se passe, compte tenu de la preuve.

P (Résultat étant donné que nous connaissons des données probantes) = P (Preuve donnée que nous connaissons le résultat) fois Prob (Résultat), mis à l'échelle par le P (Preuve)

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 ceci n'était qu'un préambule, pour arriver à Naive Bayes.

Se rendre à Naive Bayes

Jusqu'à présent, nous n'avons parlé que d'un seul élément de preuve. En réalité, il faut prévoir un résultat donné preuves multiples Dans ce cas, le calcul devient très compliqué. Pour contourner cette complication, une approche consiste à «découpler» plusieurs éléments de preuve et à traiter chaque élément de preuve comme indépendant. Cette approche est la raison pour laquelle cela s'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 se souvenir de cela comme:

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

Remarquez quelques points à propos de cette équation:

  • Si le Prob (évidence | résultat) est 1, alors nous sommes en train de multiplier par 1.
  • Si le Prob (une évidence particulière | résultat) est 0, alors le prob complet. 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 partir sans le calculer.
  • L'intuition derrière la multiplication par le avant est ainsi que nous donnons une forte probabilité de résultats plus communs, et de faibles probabilités à des résultats improbables. On les appelle aussi base rates et ils sont un moyen de mettre à l'échelle nos probabilités prédites.

Comment appliquer NaiveBayes pour prédire un résultat?

Exécutez simplement la formule ci-dessus pour chaque résultat possible. Puisque nous essayons de classer, chaque résultat est appelé un class et il a class label. Notre travail consiste à examiner les éléments de preuve, à déterminer dans quelle mesure il est probable que ce soit cette classe ou cette classe et à attribuer une étiquette à chaque entité. Encore une fois, nous adoptons une approche très simple: la classe qui a la probabilité la plus élevée est déclarée «gagnante» et cette étiquette de classe est assignée à cette combinaison de preuves.

Exemple de fruit

Essayons-le sur un exemple pour augmenter notre compréhension: Le PO a demandé un exemple d'identification «fruit».

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

  1. Si c'est long
  2. Que ce soit Sweet et
  3. Si sa couleur est jaune.

Ceci est notre "set 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 probabilités dites "Prior". (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 qu'on nous donne les propriétés d'un fruit inconnu, et qu'on nous demande 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 trois résultats, un par un. Ensuite, nous choisissons la probabilité la plus élevée et «classifions» notre fruit inconnu comme appartenant à la classe ayant la plus forte probabilité, 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)

Par une écrasante marge (0.252 >> 0.01875), nous classons ce fruit sucré / long / jaune comme susceptible d’être une banane.

Pourquoi Bayes Classifier est-il si populaire?

Regardez ce qui se passe finalement. Juste un peu de comptage et de multiplication. Nous pouvons pré-calculer tous ces termes, et la classification devient simple, 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 l'étiquette de classe correspondant au nombre le plus élevé, et vous avez terminé.

Malgré son nom, Naive Bayes s'avère excellent dans certaines applications. La classification des textes est l’un des domaines où il fait vraiment bon ménage.

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


989
2017-12-12 23:54



Ram Narasimhan explique très bien le concept ci-dessous est 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
C'est l'ensemble de données que nous utiliserons
  enter image description here
Dans le jeu de données ci-dessus, si nous donnons l’hypothèse = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'} alors quelle est la probabilité qu'il achètera ou n'achètera pas un ordinateur.
Le code ci-dessous répond exactement à cette question.
Il suffit de créer un fichier nommé 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 que 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 __name__ == "__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


16
2018-03-29 11:15



Bayes naïves: Naive Bayes est placé sous la supervision de l'apprentissage automatique, qui consistait à classer des ensembles de données. Il est utilisé pour prédire les choses en fonction de ses connaissances antérieures et de ses hypothèses d'indépendance.

Ils l'appellent naïve parce que c'est supposé (il suppose que toutes les fonctionnalités de l'ensemble de données sont tout aussi importantes et indépendantes) sont vraiment optimistes et rarement vrai dans la plupart des applications du monde réel.

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

Le diagramme ci-dessous montre comment fonctionne Bayes naïf

enter image description here

Formule pour prédire NB:

enter image description here

Comment utiliser l'algorithme Naive Bayes?

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

Etape 1: Nous trouvons d'abord la probabilité de la table qui montre la probabilité de oui ou non dans le diagramme ci-dessous. Étape 2: Trouvez la probabilité a posteriori 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érence, référez-vous à Blog.

Voir le référentiel GitHub Naive-Bayes-Exemples


14
2018-02-17 04:02



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

Supposons que vous sachiez que dix% des gens sont des fumeurs. Vous savez aussi que 90% des fumeurs sont des hommes et 80% d'entre eux ont plus de 20 ans.

Maintenant, vous voyez quelqu'un qui est un homme et 15 ans. Vous voulez savoir s'il est fumeur:

 X = smoker | he is a man and under 20

Puisque vous savez que 10% des personnes sont des fumeurs, votre estimation initiale est de 10% (probabilité antérieure, sans rien savoir de la personne) mais l'autre des éléments de preuve (qu'il soit un homme et il a 15 ans) peut affecter cette supposition.

Chaque preuve peut augmenter ou diminuer cette chance. Par exemple, ce fait qu'il est un homme mai augmenter les chances, à condition que ce pourcentage (étant un homme) chez les non-fumeurs soit inférieur, par exemple, 40%. Autrement dit, le fait d’être un homme doit être un bon indicateur d’être un fumeur plutôt qu’un non-fumeur.

Nous pouvons montrer cette contribution d'une autre manière. Pour chaque caractéristique, vous devez comparer la banalité (probabilité) de cette caractéristique (f) seule avec sa banalité 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 aussi des hommes, sachant que quelqu'un est un homme ne nous aide pas (10% * (90% / 90%) = 10%). Mais si les hommes contribuent à 40% de la société, mais 90% des fumeurs, sachant que quelqu'un est un homme augmente les chances d'être un fumeur (10% * (90% / 40%) = 22.5% ). De même, si la probabilité d'être un homme était de 95% dans la société, alors quel que soit le fait que le pourcentage d'hommes parmi les fumeurs est élevé (90%)! la preuve que quelqu'un est un homme diminue les chances qu'il soit un fumeur! (10% * (90% / 95%) = 9.5%).

Donc nous avons:

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 avons supposé que être un homme et avoir moins de 20 ans sont des traits indépendants, donc nous les avons multipliés, cela signifie que savoir que quelqu'un a moins de 20 ans n'a aucun effet sur la supposition qu'il est homme ou femme. Mais ce n'est peut-être pas vrai, par exemple peut-être que la plupart des adolescents dans une société sont des hommes ...

Utiliser cette formule dans un classificateur

Le classificateur est donné avec quelques 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 le trouver. Pour fournir les probabilités requises (90%, 10%, 80% ...), il utilise l'ensemble d'apprentissage. Par exemple, il compte les personnes qui fument dans l'ensemble de formation et constate qu'elles contribuent à 10% de l'échantillon. Ensuite, pour les fumeurs vérifie combien d'entre eux sont des hommes ou des femmes .... combien sont plus de 20 ou moins de 20 ans ....


9
2018-03-12 16:13