Da ich ein Anfänger im maschinellen Lernen und ein Anfänger in Python bin, denke ich, dass es so sein wird, als würde ich die Seite lesen, auf die ich mich im Grunde bezogen habe.
Es geht ein wenig um Mathematik. Haben Sie jemals das Wort "bedingte Wahrscheinlichkeit" gehört? Ich habe im Unterricht schon ein wenig davon gehört, konnte mich aber kaum daran erinnern.
P(B|A) = \frac{P(A \cap B)}{P(A)} = \frac{P(B)P(A|B)}{P(A)}
"P (B | A)" bezieht sich auf die Wahrscheinlichkeit, dass Ereignis B auftritt, wenn Ereignis A auftritt.
Ein berühmtes Thema ist die Geschichte der Kinder.
Ein Paar hat zwei Kinder. Es stellt sich heraus, dass mindestens einer der beiden ein Junge ist. Finden Sie zu diesem Zeitpunkt die Wahrscheinlichkeit, dass beide Jungen sind. Die Wahrscheinlichkeit, einen Jungen zu haben, und die Wahrscheinlichkeit, ein Mädchen zu haben, sind jedoch beide halbiert.
Die Idee dazu ist
Wenn Sie darüber nachdenken, können Sie sich das wie folgt vorstellen.
"Mindestens einer ist ein Junge". Wenn Sie also alle Muster auflisten, wenn zwei Kinder geboren werden, gibt es 4 von "Mann & Mann", "Mann & Frau", "Frau & Frau", "Frau & Mann". Es ist ein Muster. (Einschließlich Unterschiede zwischen Brüdern) Von diesen ist "3/4", wobei "Frau & Frau" weggelassen wird, die beide "Frau" sind, die Wahrscheinlichkeit des Ereignisses A.
Dies ist natürlich "1/4".
Das heißt, die Wahrscheinlichkeit von P (B | A) ist
P(B|A) = \frac{\frac{1}{4}}{\frac{3}{4}} = \frac{1}{3}
Es wird sein.
Referenz: Schöne Geschichte der Mathematik an der High School
Nun, das ist das Hauptthema. Naive Bayes wird auch Simple Bayes genannt. Es scheint, dass es zum Zweck der Kategorisierung von Sätzen verwendet wird, indem der Satz von Bayes leicht modifiziert wird.
P(cat|doc) = \frac{P(cat)P(doc|cat)}{P(doc)}\propto P(cat)P(doc|cat)
Dies ist die Grundform.
Ich möchte jedes Element erklären.
P (cat | doc)
ist die Wahrscheinlichkeit, eine Kategorie (cat) zu sein, wenn ein Satz (doc) gegeben ist.
Um es etwas genauer auszudrücken, es scheint die Wahrscheinlichkeit zu bedeuten, in einer Kategorie wie "IT" zu sein, wenn der Text Wörter wie "Apple", "iPhone" und "MacBook Pro" enthält.
\frac{P(cat)P(doc|cat)}{P(doc)}
Da "P (doc)" alle üblich sind, werden wir sie für die Berechnung ignorieren.
P(cat)P(doc|cat)
P (Katze)
ist einfach.
Wenn die Gesamtzahl der Sätze 100 beträgt und die Anzahl der Sätze in der IT-Kategorie 50 beträgt
P(IT) = \frac{50}{100} = \frac{1}{2}
Es kann so berechnet werden.
P (doc | cat)
macht möglicherweise keinen Sinn. Wahrscheinlichkeit, ein Satz (doc) in einer Kategorie (Katze) zu sein ...? Und das ist das Herz von Naive Bayes.
Naive Bayes gibt nicht das genaue "P (doc | cat)" an, sondern setzt die Unabhängigkeit zwischen Wortvorkommen voraus.
Die Unabhängigkeit zwischen dem Auftreten von Wörtern kann beispielsweise bedeuten, dass "Maschine" und "Lernen" Wörter sind, die häufig im Bereich des maschinellen Lernens vorkommen, aber die Wörter "Maschine" und "Lernen" sind unabhängig voneinander. Es wird berechnet, indem es vereinfacht wird, indem angenommen wird, dass es angezeigt wird.
P(doc|cat) = P(word_1 \wedge .... \wedge word_k|cat) = \prod_{i=0}^k P(word_k|cat)
Berechnen.
\prod
Ist die (x) Version von Σ
. Als nächstes berechnen wir "P (Wort | Katze)". Dies ist semantisch die Wahrscheinlichkeit, dass ein Wort erscheint, wenn eine Kategorie (Katze) angegeben wird. Berechnen Sie also wie folgt. (Die Formel befindet sich auf der Referenzseite. Bitte beziehen Sie sich darauf.)
P(word_k|cat) = \frac{Kategorie(cat)Worte in(word)Anzahl der Auftritte}{Kategorie(cat)Gesamtzahl der Wörter, die in erscheinen}
Jetzt müssen Sie nur noch mit diesen rechnen! !!
Es werden zwei Schlüsselwörter angezeigt.
Ich mache nur "+ 1". Es scheint ein "Nullfrequenzproblem" zu geben. Was ist das? Ich denke, dass P (doc | cat) durch die Gesamtleistung der Auftrittswahrscheinlichkeit von Wörtern ausgedrückt wurde, aber das Produkt ist 0, wenn es eine "0" gibt, also ist es insgesamt 0. Es wird 0 sein.
Angenommen, Sie lernen in der Kategorie "IT" und stoßen auf ein neues Wort "Python", das keine Trainingsdaten enthält. Dann ..
P(word_k|cat) = \frac{Kategorie(cat)Worte in(word)Anzahl der Auftritte}{Kategorie(cat)Gesamtzahl der Wörter, die in erscheinen}
Das Molekül von
P(Python|IT) = 0
Es wird sein. Addieren Sie also +1 zur Anzahl der Auftritte im Voraus, um zu verhindern, dass die Wahrscheinlichkeit 0 wird! !! Das scheint eine Technik zu sein, die Laplace-Glättung genannt wird. Natürlich ändert sich auch der Nenner. Wenn Sie die Formel erneut schreiben ..
P(word_k|cat) = \frac{Kategorie(cat)Worte in(word)Anzahl der Auftritte+ 1}{Kategorie(cat)Gesamtzahl der Wörter, die in erscheinen+Gesamtzahl der Wörter}
Es wird sein.
In den Beispieldaten ist es keine große Sache, aber wenn es auf die tatsächliche Berechnung angewendet wird, kann der Nenner von "P (Wort | Katze)" sehr groß werden.
Der Grund ist, dass die Anzahl der Wörter sehr groß sein kann. In einem solchen Fall kann ein Unterlauf auftreten.
Das Gegenteil von Unterlauf oder Überlauf ist, dass der Bereich nach dem Dezimalpunkt zu groß wird, um verarbeitet zu werden.
Hier kommt der Logarithmus ins Spiel. Wenn Sie den Logarithmus verwenden, können Sie ihn durch dieselbe Basisaddition ersetzen. Selbst wenn Sie den Logarithmus verwenden und hinzufügen, ist das Ergebnis dasselbe.
Ändern Sie also Folgendes in eine logarithmische Form.
\prod_{i=0}^k P(word_k|cat)
\prod_{i=0}^k \log P(word_k|cat)
Zusammengenommen lautet die endgültige Formel:
P(cat|doc) = \log P(cat) + \sum_{i=0}^k \log P(word_k|cat)
Referenz: Protokollberechnung und Formel! Dies ist perfekt! !!
Anfänger des maschinellen Lernens versuchen, Naive Bayes zu erreichen (2) - Implementierung
Daher möchte ich es mit Python implementieren. (Siehe die Website)
Ich habe sehr viel auf die folgenden Seiten verwiesen. Vielen Dank.
Recommended Posts