Komplementäre naive Bayes in Python implementieren?


9

Problem

Ich habe versucht, Naive Bayes für einen beschrifteten Datensatz von Kriminalitätsdaten zu verwenden, habe aber wirklich schlechte Ergebnisse erzielt (7% Genauigkeit). Naive Bayes läuft viel schneller als andere Alogorithmen, die ich verwendet habe, deshalb wollte ich herausfinden, warum die Punktzahl so niedrig war.

Forschung

Nach dem Lesen stellte ich fest, dass naive Bayes mit ausgeglichenen Datensätzen verwendet werden sollten, da sie eine Tendenz für Klassen mit höherer Häufigkeit aufweisen. Da meine Daten unausgeglichen sind, wollte ich versuchen, die Complementary Naive Bayes zu verwenden, da sie speziell für den Umgang mit Datenversatz entwickelt wurden. In dem Artikel, der den Prozess beschreibt, ist die Anwendung für die Textklassifizierung vorgesehen, aber ich verstehe nicht, warum die Technik in anderen Situationen nicht funktionieren würde. Das Papier, auf das ich mich beziehe, finden Sie hier . Kurz gesagt, die Idee ist, Gewichte zu verwenden, die auf den Vorkommen basieren, in denen eine Klasse nicht angezeigt wird.

Nach einigen Recherchen konnte ich eine Implementierung in Java finden, aber leider kenne ich kein Java und verstehe den Algorithmus einfach nicht gut genug, um mich selbst zu implementieren.

Frage

Wo finde ich eine Implementierung in Python? Wenn das nicht existiert, wie soll ich es selbst implementieren?

Antworten:


5

Naive Bayes sollte in der Lage sein, mit unausgeglichenen Datensätzen umzugehen. Denken Sie daran, dass die Bayes-Formel lautet

P.(yx)=P.(xy)P.(y)P.(x)P.(xy)P.(y)

Also berücksichtigt das vorherige .P.(xy)P.(y)P.(y)

In Ihrem Fall sind Sie vielleicht überangepasst und brauchen eine Glättung? Sie können mit +1 Glättung beginnen und sehen, ob es Verbesserungen gibt. In Python würde ich bei Verwendung von numpy die Glättung folgendermaßen implementieren:

table = # counts for each feature 
PT = (table + 1) / (table + 1).sum(axis=1, keepdims=1)

Beachten Sie, dass Sie hiermit multinomiale naive Bayes erhalten - dies gilt nur für kategoriale Daten.

Ich kann auch den folgenden Link vorschlagen: http://www.itshared.org/2015/03/naive-bayes-on-apache-flink.html . Es geht darum, Naive Bayes auf Apache Flink zu implementieren. Während es Java ist, gibt es Ihnen vielleicht eine Theorie, die Sie benötigen, um den Algorithmus besser zu verstehen.


Sie können richtig sein, es sieht so aus, als ob naive Bayes nur das Ungleichgewichtsproblem bei der Textklassifizierung haben. Können Sie erklären, was Glättung ist?
Heuschrecke

Haben Sie sich den Link angesehen? Es wird dort erklärt. Kurz gesagt, wenn die Schätzung manchmal wird nie beim Training gesehen und Glättung sorgt , dass es nicht den Klassifikator Leistung , indem Sie einige zusätzliche Zahl (im Falle von Laplace oder +1 Glättung) auf alle Funktionen nicht ruinieren . P.(xy)x
Alexey Grigorev

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.