Eine einfache Erklärung der Naive Bayes-Klassifikation


547

Es fällt mir schwer, den Prozess von Naive Bayes zu verstehen, und ich habe mich gefragt, ob jemand ihn mit einem einfachen Schritt-für-Schritt-Prozess auf Englisch erklären kann. Ich verstehe, dass Vergleiche nach Zeiten als Wahrscheinlichkeit erforderlich sind, aber ich habe keine Ahnung, wie die Trainingsdaten mit dem tatsächlichen Datensatz zusammenhängen.

Bitte erklären Sie mir, welche Rolle das Trainingsset spielt. Ich gebe hier ein sehr einfaches Beispiel für Früchte, wie zum Beispiel Bananen

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

18
Es ist ziemlich einfach, wenn Sie den Satz von Bayes verstehen. Wenn Sie den Satz von Bayes gelesen haben, versuchen Sie diesen Link yudkowsky.net/rational/bayes .
Prise

1
Bitte erläutern Sie Ihr Beispiel. für die erste Zeile in Ihrem Trainingssatz: Wird rund als rot klassifiziert oder sind sowohl runde als auch rote Variablen als etwas anderes klassifiziert? Wenn es das letztere ist, wie lauten die Klassifikationen für jeden Eintrag in Ihrem Trainingssatz?
K Mehta

22
HINWEIS: Die unten akzeptierte Antwort ist kein traditionelles Beispiel für Naive Bayes. Es ist meistens eine Nearest Neighbor-Implementierung. Lesen Sie entsprechend.
Chmullig

1
@Jaggerjack: RamNarasimhans Antwort ist besser erklärt als die akzeptierte Antwort.
Unmesha SreeVeni

2
Nun, wenn man ein Diagramm mit einigen Punkten sieht, bedeutet das nicht wirklich, dass es KNN ist :) Wie Sie die Wahrscheinlichkeiten berechnen, liegt ganz bei Ihnen. Naive Bayes berechnet es unter Verwendung des vorherigen multipliziert mit der Wahrscheinlichkeit, so dass Yavar dies in seiner Antwort gezeigt hat. Wie man zu diesen Wahrscheinlichkeiten kommt, ist hier wirklich nicht wichtig. Die Antwort ist absolut richtig und ich sehe keine Probleme darin.
Avinash Shah

Antworten:


672

Ihre Frage, so wie ich sie verstehe, ist in zwei Teile unterteilt. Teil eins ist, dass Sie ein besseres Verständnis des Naive Bayes-Klassifikators benötigen, und Teil zwei ist die Verwirrung um das Trainingsset.

Im Allgemeinen müssen alle Algorithmen für maschinelles Lernen für überwachte Lernaufgaben wie Klassifizierung, Vorhersage usw. oder für unbeaufsichtigte Lernaufgaben wie Clustering trainiert werden.

Während des Trainingsschritts werden die Algorithmen mit einem bestimmten Eingabedatensatz (Trainingssatz) unterrichtet, damit wir sie später auf unbekannte Eingaben (die sie noch nie gesehen haben) testen können, für die sie klassifizieren oder vorhersagen können (im Falle einer Überwachung) Lernen) basierend auf ihrem Lernen. Darauf basieren die meisten Techniken des maschinellen Lernens wie Neuronale Netze, SVM, Bayesian usw.

In einem allgemeinen Projekt für maschinelles Lernen müssen Sie Ihren Eingabesatz grundsätzlich in einen Entwicklungssatz (Trainingssatz + Entwicklertestsatz) und einen Testsatz (oder Bewertungssatz) unterteilen. Denken Sie daran, dass Ihr grundlegendes Ziel darin besteht, dass Ihr System neue Eingaben lernt und klassifiziert, die sie noch nie zuvor im Dev-Set oder im Test-Set gesehen haben.

Der Testsatz hat normalerweise das gleiche Format wie der Trainingssatz. Es ist jedoch sehr wichtig, dass sich der Testsatz vom Trainingskorpus unterscheidet: Wenn wir den Trainingssatz einfach als Testsatz wiederverwenden, wird ein Modell, das sich einfach seine Eingabe merkt, ohne zu lernen, wie man auf neue Beispiele verallgemeinert, irreführend erhalten Highscores.

Im Allgemeinen können beispielsweise 70% unserer Daten als Trainingssatzfälle verwendet werden. Denken Sie auch daran, den ursprünglichen Satz zufällig in die Trainings- und Testsätze zu unterteilen .

Nun komme ich zu Ihrer anderen Frage zu Naive Bayes.

Betrachten Sie das folgende Beispiel, um das Konzept der naiven Bayes-Klassifikation zu demonstrieren:

Geben Sie hier die Bildbeschreibung ein

Wie angegeben, können die Objekte entweder GREENoder klassifiziert werden RED. Unsere Aufgabe ist es, neue Fälle bei ihrem Eintreffen zu klassifizieren, dh anhand der aktuell vorhandenen Objekte zu entscheiden, zu welcher Klassenbezeichnung sie gehören.

Da es doppelt so viele GREENObjekte gibt wie RED, ist es vernünftig zu glauben, dass ein neuer Fall (der noch nicht beobachtet wurde) mit doppelter Wahrscheinlichkeit eher eine Mitgliedschaft hat GREENals RED. In der Bayes'schen Analyse ist dieser Glaube als vorherige Wahrscheinlichkeit bekannt. Frühere Wahrscheinlichkeiten basieren auf früheren Erfahrungen, in diesem Fall dem Prozentsatz GREENund den REDObjekten, und werden häufig verwendet, um Ergebnisse vorherzusagen, bevor sie tatsächlich eintreten.

So können wir schreiben:

Vorherige Wahrscheinlichkeit vonGREEN :number of GREEN objects / total number of objects

Vorherige Wahrscheinlichkeit vonRED :number of RED objects / total number of objects

Da es insgesamt 60Objekte gibt, 40von denen GREENund 20 sind RED, sind unsere vorherigen Wahrscheinlichkeiten für die Klassenmitgliedschaft:

Vorherige Wahrscheinlichkeit fürGREEN :40 / 60

Vorherige Wahrscheinlichkeit fürRED :20 / 60

Nachdem wir unsere vorherige Wahrscheinlichkeit formuliert haben, können wir nun ein neues Objekt klassifizieren ( WHITEKreis im Diagramm unten). Da die Objekte gut gruppiert sind, ist anzunehmen, dass je mehr GREEN(oder RED) Objekte in der Nähe von X vorhanden sind, desto wahrscheinlicher ist es, dass die neuen Fälle zu dieser bestimmten Farbe gehören. Um diese Wahrscheinlichkeit zu messen, zeichnen wir einen Kreis um X, der eine Anzahl (a priori zu wählender) Punkte umfasst, unabhängig von deren Klassenbezeichnungen. Dann berechnen wir die Anzahl der Punkte im Kreis, die zu jeder Klassenbezeichnung gehören. Daraus berechnen wir die Wahrscheinlichkeit:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Aus der obigen Abbildung geht hervor, dass die Wahrscheinlichkeit eines XGegebenen GREENkleiner ist als die Wahrscheinlichkeit eines XGegebenen RED, da der Kreis 1 GREENObjekte und 3 REDEinsen umfasst. Somit:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Obwohl der Stand der Wahrscheinlichkeiten , die angeben , Xgehören , kann GREEN(vorausgesetzt , dass es doppelt so viele sind im GREENVergleich zu RED) zeigt die Wahrscheinlichkeit sonst; dass die Klassenzugehörigkeit von Xist RED(vorausgesetzt, es befinden sich mehr REDObjekte in der Nähe von Xals GREEN). In der Bayes'schen Analyse wird die endgültige Klassifizierung durch Kombinieren beider Informationsquellen, dh der vorherigen und der Wahrscheinlichkeit, erstellt, um eine hintere Wahrscheinlichkeit unter Verwendung der sogenannten Bayes-Regel (benannt nach Rev. Thomas Bayes 1702-1761) zu bilden.

Geben Sie hier die Bildbeschreibung ein

Schließlich klassifizieren wir X als, REDda seine Klassenmitgliedschaft die größte hintere Wahrscheinlichkeit erreicht.


39
Ist dieser Algorithmus nicht eher wie k-nächste Nachbarn?
Renaud

251
Diese Antwort ist verwirrend - sie mischt KNN (k nächste Nachbarn) und naive Bayes.
Michal Illich

7
Die Antwort verlief gut, bis die Wahrscheinlichkeit kam. @Yavar hat also K-nächste Nachbarn zur Berechnung der Wahrscheinlichkeit verwendet. Wie richtig ist das? Wenn ja, mit welchen anderen Methoden kann die Wahrscheinlichkeit berechnet werden?
Wrahool

1
Sie haben einen Kreis als Beispiel für die Wahrscheinlichkeit verwendet. Ich habe über Gaußsche Naive Bayes gelesen, bei denen die Wahrscheinlichkeit Gaußscher ist. Wie kann das erklärt werden?
Umair Durrani

1
Eigentlich ist die Antwort mit knn richtig. Wenn Sie die Verteilung und damit die Wahrscheinlichkeitsdichte einer solchen Verteilung nicht kennen, müssen Sie sie irgendwie finden. Dies kann über kNN oder Kernel erfolgen. Ich denke, es fehlen einige Dinge. Sie können diese Präsentation jedoch überprüfen .
CS

1053

Mir ist klar, dass dies eine alte Frage mit einer etablierten Antwort ist. Der Grund, warum ich etwas poste, ist, dass die akzeptierte Antwort viele Elemente von k-NN ( k- nächstgelegene Nachbarn) enthält, einem anderen Algorithmus.

Sowohl k-NN als auch NaiveBayes sind Klassifizierungsalgorithmen. Konzeptionell verwendet k-NN die Idee der "Nähe", um neue Entitäten zu klassifizieren. In k-NN wird 'Nähe' mit Ideen wie Euklidischer Abstand oder Kosinusabstand modelliert. Im Gegensatz dazu wird in NaiveBayes das Konzept der 'Wahrscheinlichkeit' verwendet, um neue Entitäten zu klassifizieren.

Da es sich bei der Frage um Naive Bayes handelt, würde ich jemandem hier die Ideen und Schritte beschreiben. Ich werde versuchen, es mit so wenig Gleichungen und so einfach wie möglich im Klartext zu machen.

Erstens die bedingte Wahrscheinlichkeits- und Bayes-Regel

Bevor jemand die Nuancen von Naive Bayes verstehen und schätzen kann, muss er zuerst einige verwandte Konzepte kennen, nämlich die Idee der bedingten Wahrscheinlichkeit und die Bayes-Regel. (Wenn Sie mit diesen Konzepten vertraut sind, fahren Sie mit dem Abschnitt " Getting to Naive Bayes" fort. )

Bedingte Wahrscheinlichkeit im Klartext: Wie hoch ist die Wahrscheinlichkeit, dass etwas passiert, wenn bereits etwas anderes passiert ist?

Nehmen wir an, es gibt einige Ergebnisse O. und einige Beweise E. Aus der Art und Weise, wie diese Wahrscheinlichkeiten definiert sind: Die Wahrscheinlichkeit, dass sowohl das Ergebnis O als auch die Beweise E auftreten, ist: (Wahrscheinlichkeit, dass O auftritt) multipliziert mit (Wahrscheinlichkeit von E, vorausgesetzt, dass O ist passiert)

Ein Beispiel zum Verständnis der bedingten Wahrscheinlichkeit:

Nehmen wir an, wir haben eine Sammlung von US-Senatoren. Senatoren könnten Demokraten oder Republikaner sein. Sie sind auch entweder männlich oder weiblich.

Wenn wir einen Senator völlig zufällig auswählen, wie hoch ist die Wahrscheinlichkeit, dass diese Person eine Demokratin ist? Die bedingte Wahrscheinlichkeit kann uns dabei helfen, dies zu beantworten.

Wahrscheinlichkeit von (demokratischer und weiblicher Senator) = Prob (Senator ist Demokrat) multipliziert mit der bedingten Wahrscheinlichkeit, weiblich zu sein, da sie ein Demokrat sind.

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

Wir könnten genau dasselbe berechnen, umgekehrt:

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

Bayes-Regel verstehen

Konzeptionell ist dies ein Weg von P (Evidence | Known Outcome) zu P (Outcome | Known Evidence). Oft wissen wir, wie häufig bestimmte Beweise bei einem bekannten Ergebnis beobachtet werden . Wir müssen diese bekannte Tatsache nutzen, um das Gegenteil zu berechnen und die Wahrscheinlichkeit zu berechnen, dass dieses Ergebnis angesichts der Beweise eintritt.

P (Ergebnis, wenn wir einige Beweise kennen) = P (Ergebnisse, wenn wir das Ergebnis kennen) mal Prob (Ergebnis), skaliert mit P (Beweise)

Das klassische Beispiel zum Verständnis der Bayes-Regel:

Probability of Disease D given Test-positive = 

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

Das alles war nur eine Präambel, um nach Naive Bayes zu gelangen.

Anreise nach Naive Bayes

Bisher haben wir nur über ein Beweisstück gesprochen. In Wirklichkeit müssen wir ein Ergebnis vorhersagen, wenn mehrere Beweise vorliegen. In diesem Fall wird die Mathematik sehr kompliziert. Um diese Komplikation zu umgehen, besteht ein Ansatz darin, mehrere Beweisstücke zu „entkoppeln“ und jedes Beweisstück als unabhängig zu behandeln. Dieser Ansatz wird deshalb als naive Bayes bezeichnet.

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

Viele Menschen erinnern sich daran als:

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

Beachten Sie einige Dinge zu dieser Gleichung:

  • Wenn der Prob (Beweis | Ergebnis) 1 ist, multiplizieren wir nur mit 1.
  • Wenn der Prob (ein bestimmter Beweis | Ergebnis) 0 ist, dann ist der gesamte Prob. wird 0. Wenn Sie widersprüchliche Beweise sehen, können wir dieses Ergebnis ausschließen.
  • Da wir alles durch P (Evidence) teilen, können wir sogar davonkommen, ohne es zu berechnen.
  • Die Intuition hinter der Multiplikation mit dem Prior ist, dass wir häufigeren Ergebnissen eine hohe Wahrscheinlichkeit und unwahrscheinlichen Ergebnissen niedrige Wahrscheinlichkeiten geben. Diese werden auch genannt base ratesund sind eine Möglichkeit, unsere vorhergesagten Wahrscheinlichkeiten zu skalieren.

Wie wende ich NaiveBayes an, um ein Ergebnis vorherzusagen?

Führen Sie einfach die obige Formel für jedes mögliche Ergebnis aus. Da wir versuchen zu klassifizieren , wird jedes Ergebnis als a bezeichnet classund hat eine. class label.Unsere Aufgabe ist es, die Beweise zu untersuchen, zu prüfen, wie wahrscheinlich es ist, dass es sich um diese oder jene Klasse handelt, und jeder Entität eine Bezeichnung zuzuweisen. Auch hier verfolgen wir einen sehr einfachen Ansatz: Die Klasse mit der höchsten Wahrscheinlichkeit wird zum "Gewinner" erklärt, und diese Klassenbezeichnung wird dieser Kombination von Beweisen zugewiesen.

Fruchtbeispiel

Probieren wir es an einem Beispiel aus, um unser Verständnis zu verbessern: Das OP bat um ein Beispiel für die Identifizierung von Früchten.

Nehmen wir an, wir haben Daten zu 1000 Fruchtstücken. Es sind Bananen , Orangen oder andere Früchte . Wir kennen 3 Eigenschaften über jede Frucht:

  1. Ob es lang ist
  2. Ob es süß ist und
  3. Wenn seine Farbe Gelb ist.

Dies ist unser "Trainingsset". Wir werden dies verwenden, um die Art der neuen Früchte vorherzusagen, denen wir begegnen.

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
             ___________________________________________________________________

Wir können viele Dinge über unsere Obstsammlung vorberechnen.

Die sogenannten "Prior" -Wahrscheinlichkeiten. (Wenn wir keine der Fruchtattribute kennen würden, wäre dies unsere Vermutung.) Dies sind unserebase rates.

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

Wahrscheinlichkeit von "Beweisen"

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

Wahrscheinlichkeit der "Wahrscheinlichkeit"

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

Wie klassifiziert man eine Frucht?

Nehmen wir an, wir erhalten die Eigenschaften einer unbekannten Frucht und werden gebeten, sie zu klassifizieren. Uns wird gesagt, dass die Frucht lang, süß und gelb ist. Ist es eine Banane? Ist es eine Orange? Oder ist es eine andere Frucht?

Wir können einfach die Zahlen für jedes der drei Ergebnisse einzeln eingeben. Dann wählen wir die höchste Wahrscheinlichkeit und klassifizieren unsere unbekannte Frucht als zu der Klasse gehörend, die die höchste Wahrscheinlichkeit hatte, basierend auf unseren vorherigen Beweisen (unserem 1000-Frucht-Trainingsset):

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)

Mit überwältigender Mehrheit ( 0.252 >> 0.01875) klassifizieren wir diese süße / lange / gelbe Frucht als wahrscheinlich eine Banane.

Warum ist Bayes Classifier so beliebt?

Schau dir an, worauf es letztendlich ankommt. Nur ein bisschen zählen und multiplizieren. Wir können alle diese Begriffe vorberechnen, sodass die Klassifizierung einfach, schnell und effizient wird.

Let z = 1 / P(evidence). Jetzt berechnen wir schnell die folgenden drei Größen.

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)  ...

Weisen Sie die Klassenbezeichnung der höchsten Zahl zu, und Sie sind fertig.

Trotz des Namens erweist sich Naive Bayes in bestimmten Anwendungen als ausgezeichnet. Die Textklassifizierung ist ein Bereich, in dem sie wirklich glänzt.

Ich hoffe, das hilft beim Verständnis der Konzepte hinter dem Naive Bayes-Algorithmus.


14
Danke für die sehr klare Erklärung! Einfach einer der besseren, die im Web herumschweben. Frage: Da jedes P (Ergebnis / Beweis) mit 1 / z = p (Beweis) multipliziert wird (was im Fruchtfall bedeutet, dass jedes im Wesentlichen die Wahrscheinlichkeit ist, die ausschließlich auf früheren Beweisen basiert), wäre es richtig zu sagen, dass z dies nicht tut Für Naive Bayes überhaupt keine Rolle? Was also bedeuten würde, dass wenn man beispielsweise auf eine lange / süße / gelbe Frucht stößt, die keine Banane ist, diese falsch klassifiziert wird.
Kovarianz

7
@ E.Chow Ja, Sie haben Recht, dass das Berechnen von z für Naive Bayes keine Rolle spielt. (Es ist eine Möglichkeit, die Wahrscheinlichkeiten auf einen Wert zwischen 0 und 1 zu skalieren.) Beachten Sie, dass z das Produkt der Wahrscheinlichkeiten aller vorliegenden Beweise ist. (Es unterscheidet sich von den Prioritäten, die die Basisrate der Klassen darstellen.) Sie haben Recht: Wenn Sie eine lange / süße / gelbe Frucht gefunden haben, die keine Banane ist, klassifiziert NB sie auf dieser Grundlage fälschlicherweise als Banane Trainingsset. Der Algorithmus ist eine ‚beste probabilistische Vermutung basierend auf Beweise‘ und so es wird falsch klassifiziert gelegentlich.
Ram Narasimhan

1
@ Jasper In der Tabelle gibt es insgesamt 200 "Andere Früchte" und 50 davon sind gelb. Angesichts der Tatsache, dass die Frucht "Andere Frucht" ist, ist das Universum 200. 50 von ihnen sind gelb. Daher 50/200. Beachten Sie, dass 800 die Gesamtzahl der gelben Früchte ist. Wenn wir also P (andere Früchte / Gelb) wollten, würden wir tun, was Sie vorschlagen: 50/800.
Ram Narasimhan

3
Absolut gute Erklärung. Ich kann diesen Algorithmus aus wissenschaftlichen Arbeiten und Büchern nicht verstehen. Weil esoterische Erklärungen vielleicht allgemein als Schreibstil akzeptiert werden. Das ist alles und so einfach. Vielen Dank.
Suat Atan PhD

3
Warum addieren sich die Wahrscheinlichkeiten nicht zu 1? Der Beweis ist im Beispiel 0,26 (500/100 * 650/1000 * 800/1000), und so ist das endgültige P (Banane | ...) = 0,252 / 0,26 = 0,969 und das P (andere | ...) = 0,01875 / 0,26 = 0,072. Zusammen ergeben sie 1.04!
Mauricio

18

Ram Narasimhan hat das Konzept hier sehr gut erklärt . Dies ist eine alternative Erklärung anhand des Codebeispiels von Naive Bayes in Aktion.
Es wird ein Beispielproblem aus diesem Buch auf Seite 351 verwendet.
Dies ist der Datensatz, den wir im obigen Datensatz verwenden werden, wenn wir angeben die Hypothese = wie hoch ist dann die Wahrscheinlichkeit, dass er einen Computer kauft oder nicht. Der folgende Code beantwortet genau diese Frage. Erstellen Sie einfach eine Datei mit dem Namen named und fügen Sie den folgenden Inhalt ein.
Geben Sie hier die Bildbeschreibung ein
{"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

new_dataset.csv

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

Hier ist der Code, in dem die Kommentare alles erklären, was wir hier tun! [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()

Ausgabe:

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

Hoffe, es hilft beim besseren Verständnis des Problems

Frieden


18

Naive Bayes: Naive Bayes unterliegt der Überwachung des maschinellen Lernens, mit dem Datensätze klassifiziert wurden. Es wird verwendet, um Dinge basierend auf seinen Vorkenntnissen und Unabhängigkeitsannahmen vorherzusagen.

Sie nennen es naiv, weil die Annahmen (es wird davon ausgegangen, dass alle Funktionen im Datensatz gleich wichtig und unabhängig sind) wirklich optimistisch sind und in den meisten realen Anwendungen selten zutreffen.

Es ist der Klassifizierungsalgorithmus, der die Entscheidung für den unbekannten Datensatz trifft. Es basiert auf dem Bayes-Theorem, das die Wahrscheinlichkeit eines Ereignisses anhand seines Vorwissens beschreibt.

Das folgende Diagramm zeigt, wie naive Bayes funktionieren

Geben Sie hier die Bildbeschreibung ein

Formel zur Vorhersage NB:

Geben Sie hier die Bildbeschreibung ein

Wie benutzt man den Naive Bayes Algorithmus?

Nehmen wir ein Beispiel, wie NB Woks

Schritt 1: Zuerst ermitteln wir die Wahrscheinlichkeit der Tabelle, die die Wahrscheinlichkeit von Ja oder Nein im folgenden Diagramm zeigt. Schritt 2: Finden Sie die hintere Wahrscheinlichkeit jeder Klasse.

Geben Sie hier die Bildbeschreibung ein

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.

Weitere Informationen finden Sie in diesem Blog.

Siehe GitHub Repository Naive-Bayes-Beispiele


14

Ich versuche die Bayes-Regel anhand eines Beispiels zu erklären.

Wie groß ist die Chance, dass eine zufällige Person, die aus der Gesellschaft ausgewählt wurde, Raucher ist?

Sie können 10% antworten.

Was ist, wenn die Person ein Mann und 15 Jahre alt ist?

Es kann nicht 60% sein, obwohl wir wissen, dass der Prozentsatz der Raucher sehr niedrig war. Es kann auch nicht weniger als 10% sein. 15 oder 20% sind bessere Vermutungen.

Tatsächlich versuchen wir, die anfängliche Vermutung mit neuen Beweisstücken zu aktualisieren ( P(smoker) vs. P(smoker | evidence)). Die Bayes-Regel ist eine Möglichkeit, diese beiden Wahrscheinlichkeiten miteinander zu verbinden.

P(smoker | evidence) = P(smoker)* p(evidence | smoker)/P(evidence)

Jeder Beweis kann diese Chance erhöhen oder verringern. Zum Beispiel kann diese Tatsache, dass er ein Mann ist , die Chance erhöhen, vorausgesetzt, dieser Prozentsatz (ein Mann zu sein) unter Nichtrauchern ist niedriger. Mit anderen Worten, ein Mann zu sein, muss ein guter Indikator dafür sein, eher Raucher als Nichtraucher zu sein.

Diesen Beitrag können wir auch auf andere Weise zeigen. Für jedes Merkmal können Sie die Gemeinsamkeit (Wahrscheinlichkeit) dieses Merkmals unter den gegebenen Bedingungen mit seiner Gemeinsamkeit allein vergleichen. ( P(f | x) vs. P(f)).

P(smoker | evidence) / P(smoker) = P(evidence | smoker)/P(evidence)

Wenn wir zum Beispiel wissen, dass 90% der Raucher Männer sind, reicht es immer noch nicht aus zu sagen, ob ein Mann ein Indikator dafür ist, Raucher zu sein oder nicht. Wenn zum Beispiel die Wahrscheinlichkeit, ein Mann in der Gesellschaft zu sein, ebenfalls 90% beträgt, hilft es uns nicht, zu wissen, dass jemand ein Mann ist ((90% / 90%) = 1. Wenn Männer jedoch zu 40% der Gesellschaft, aber zu 90% der Raucher beitragen, erhöht das Wissen, dass jemand ein Mann ist, die Wahrscheinlichkeit, Raucher zu sein (90% / 40%) = 2.25, und erhöht die anfängliche Schätzung (10%) um 2,25, was 22,5% ergibt.

Wenn jedoch die Wahrscheinlichkeit, ein Mann zu sein, in der Gesellschaft 95% betrug, dann ungeachtet der Tatsache, dass der Prozentsatz der Männer unter den Rauchern hoch ist (90%)! Der Beweis, dass jemand ein Mann ist, verringert die Wahrscheinlichkeit, dass er Raucher ist! (90% / 95%) = 0.95).

Also haben wir:

P(smoker | f1, f2, f3,... ) = P(smoker) * contribution of f1* contribution of f2 *... =
P(smoker)* 
(P(being a man | smoker)/P(being a man))*
(P(under 20 | smoker)/ P(under 20))

Beachten Sie, dass wir in dieser Formel davon ausgegangen sind, dass es unabhängige Merkmale sind , ein Mann zu sein und unter 20 zu sein. Daher haben wir sie multipliziert. Dies bedeutet, dass das Wissen, dass jemand unter 20 ist, keinen Einfluss darauf hat, zu erraten, dass er ein Mann oder eine Frau ist. Aber es kann nicht wahr sein, zum Beispiel sind die meisten Jugendlichen in einer Gesellschaft Männer ...

Verwendung dieser Formel in einem Klassifikator

Der Klassifikator hat einige Merkmale (ein Mann zu sein und unter 20 zu sein) und muss entscheiden, ob er Raucher ist oder nicht (dies sind zwei Klassen). Es verwendet die obige Formel, um die Wahrscheinlichkeit jeder Klasse unter den Beweisen (Merkmalen) zu berechnen, und weist der Eingabe die Klasse mit der höchsten Wahrscheinlichkeit zu. Um die erforderlichen Wahrscheinlichkeiten (90%, 10%, 80% ...) bereitzustellen, wird das Trainingsset verwendet. Zum Beispiel werden die Personen im Trainingssatz gezählt, die Raucher sind und 10% der Stichprobe ausmachen. Dann prüft der Raucher, wie viele von ihnen Männer oder Frauen sind ... wie viele über 20 oder unter 20 sind ... Mit anderen Worten, es wird versucht, die Wahrscheinlichkeitsverteilung der Merkmale für jede Klasse basierend auf dem Training zu erstellen Daten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.