Frage

Ich bin mit einem Bayes-Klassifikator mehrere tausend Dokumente in 30 verschiedenen Kategorien zu kategorisieren. Ich habe einen Bayes-Klassifikator implementiert und mit einiger Merkmalsauswahl (meist Filterung unnütze Worte) Ich habe über eine 30% ige Testgenauigkeit bekommen, mit 45% Training Genauigkeit. Dies ist deutlich besser als zufällig, aber ich will es besser sein.

Ich habe versucht, AdaBoost mit NB Umsetzung, aber es scheint nicht merklich bessere Ergebnisse zu erhalten (die Literatur Split auf diese scheint, sagen einige Papiere AdaBoost mit NB nicht geben bessere Ergebnisse, andere). Kennen Sie alle anderen Erweiterungen NB, die möglicherweise eine bessere Genauigkeit geben kann?

War es hilfreich?

Lösung

Nach meiner Erfahrung richtig Naive Bayes trainierte Klassifizierer sind in der Regel erstaunlich präzise (und sehr schnell zu trainieren - deutlich schneller als jeder Klassifizierer-Builder i everused haben).

Wenn Sie also Klassifikator Vorhersage verbessern möchten, können Sie an mehreren Stellen aussehen:

  • tune Ihr Klassifikator (der Klassifiziergeräts abstimmbaren Paramater Einstellung);

  • gilt irgendeine Art von Klassifikator Kombinationstechnik (zB ensembling, die Förderung, Absacken); oder Sie können

  • Blick auf die Daten zum Sichter zugeführt - entweder mehr Daten hinzufügen, verbessern Sie Ihre grundlegende Parsing oder verfeinern Sie die Funktionen, die Sie wählen aus die Daten.

w / r / t naive Bayes-Klassifikatoren, Parameterabstimmung ist begrenzt; Ich empfehle auf Ihre Daten konzentrieren können - das heißt, die Qualität Ihrer Pre-Processing und die Merkmalsauswahl.

I. Daten Parsing (Pre-Processing)

Ich gehe davon aus Rohdaten sind so etwas wie eine Reihe von Rohtext für jeden Datenpunkt, der durch eine Reihe von Schritten der Verarbeitung Sie jede Zeichenfolge in eine strukturierten Vektor-Transformation (1D-Array) für jeden Datenpunkt, so dass jede Offset entsprechen ein Merkmal (normalerweise ein Wort) und der Wert in diesem Offset entspricht Frequenz.

  • stammen : entweder manuell oder durch eine stamm Bibliothek? die beliebten Open-Source-diejenigen sind Porter, Lancaster und Schneeball. So für Wenn Sie beispielsweise die Begriffe haben Programmierer, Programm, Programme, programmiert in einem Datenpunkt angegeben, wird eine stemmer sich eine Verringerung stamm (wahrscheinlich Programm ), damit Ihr Begriff Vektor für diese Daten Punkt einen Wert von 4 für das Feature-Programm hat, das ist wahrscheinlich das, was Sie wollen.

  • Synonym Befund : gleiche Idee wie stammen - fach verwandte Worte in ein einziges Wort; so kann ein Synonym finder Entwickler, Programmierer identifizieren, Coder und Software-Ingenieur und rollen sie in einen einzigen Begriff

  • neutrale Wörter : Wörter mit ähnlichen Frequenzen über Klassen machen schlechte Eigenschaften


II. Feature Selection

Sehen Sie eine prototypische Anwendungsfall für NBCs: Filtern Spam; sehen Sie schnell, wie es ausfällt und wie schnell kann man sehen, wie es zu verbessern. Zum Beispiel haben überdurchschnittlich hohe Spam-Filter nuancierte Funktionen wie: Häufigkeit von Wörtern in allen Kappen, die Häufigkeit der Wörter in Titel, und das Auftreten von Ausrufezeichen im Titel. Darüber hinaus die besten Eigenschaften sind oft nicht einzelne Worte, sondern beispielsweise Paare von Wörtern oder Wortgruppen größer .

III. Spezifische Classifier Optimizations

Anstelle von 30 Klassen verwenden, um eine 'One-gegen-many' -Regelung - mit anderen Worten: Sie beginnen mit einer Zwei-Klassen-Sichter (Klasse A und 'alles andere'), dann die Ergebnisse in der ‚alles andere‘ Klasse werden dem Algorithmus für die Einstufung in die Klasse B und ‚alles andere‘ zurückgegeben, etc.

Die Fisher-Methode (wahrscheinlich die häufigste Art und Weise eines Bayes-Klassifikator. Zu optimieren) Für mich, Ich denke, von Fisher als Normalisieren (richtiger: Normierungs ) die Eingangswahrscheinlichkeiten Ein NBC die Merkmalswahrscheinlichkeiten verwendet einen ‚Voll Dokument‘ Wahrscheinlichkeit zu konstruieren. Die Fisher-Methode berechnet die Wahrscheinlichkeit einer Kategorie für jeder Merkmal des Dokuments kombiniert dann diese Merkmalswahrscheinlichkeiten und vergleicht diese kombinierte Wahrscheinlichkeit, mit der Wahrscheinlichkeit eines zufälligen Satz von Funktionen.

Andere Tipps

Ich würde vorschlagen, ein SGDClassifier , wie in diesen und stimmen sie es in Bezug auf die Regularisierung Stärke.

Versuchen Sie auch die Formel tune in TFIDF Sie durch Abstimmen der Parameter TFIFVectorizer .

  • Ich sehe in der Regel, dass für Textklassifikationsprobleme SVM oder Logistik Regressioin , wenn ein-gegen-alle übertrifft NB ausgebildet. Wie Sie in diese schönen Artikel von Stanford Menschen für längere Dokumente SVM übertrifft NB sehen können. Der Code für das Papier, das eine Kombination von SVM und NB ( NBSVM ) verwendet, ist hier .

  • Zweitens stimmen Sie Ihre TFIDF Formel (z sublinear tf, smooth_idf).

  • Normalisieren Ihre Proben mit l2 oder l1 Normalisierung (default in Tfidfvectorization), weil es für verschiedene Dokumentlängen ausgleicht.

  • Mehrschichtiges Perzeptron , wird in der Regel bessere Ergebnisse als NB oder SVM wegen der Nichtlinearität eingeführt, die Probleme, die viele Textklassifikation inhärent ist. Ich habe eine sehr parallel eine mit Theano / Lasagne implementiert, die leicht zu bedienen ist und herunterladbare hier .

  • Versuchen Sie, tune Ihre l1 / l2 / elasticnet Regularisierung . Es macht einen großen Unterschied in SGDClassifier / SVM / Logistische Regression.

  • Versuchen zur Verwendung n-Gramme , die in tfidfvectorizer konfigurierbar ist.

  • Wenn Sie Ihre Dokumente Struktur (zum Beispiel hat Titel ) betrachtet verschiedene Funktionen für verschiedene Teile verwenden. Zum Beispiel Add title_word1 zu Ihrem Dokument, wenn word1 geschieht im Titel des Dokuments.

  • Betrachten Sie die Länge des Dokuments mit als Merkmal (zum Beispiel Anzahl der Wörter oder Zeichen).

  • Betrachten Sie mit Meta-Informationen über das Dokument (z Zeitpunkt der Erstellung, Name des Autors, URL des Dokuments, usw.).

  • Vor kurzem Facebook veröffentlicht ihre Fasttext Klassifizierungscode sehr welche führt gut für viele Aufgaben, sicher sein, es zu versuchen.

Mit Laplace-Korrektur zusammen mit AdaBoost.

In AdaBoost zunächst ein Gewicht zu jedem Datentupels in der Trainingsdatenmenge zugeordnet ist. Die anfänglichen Gewichte eingestellt sind die init_weights Verfahren verwendet, die alle Gewichts 1/d werden initialisiert, wobei d ist die Größe der Menge von Trainingsdaten.

Dann wird eine generate_classifiers Methode aufgerufen wird, das läuft mal k, k Instanzen des Bayes-Klassifikator zu schaffen. Diese Klassifizierer werden dann gewichtet, und die Testdaten auf jedem Klassifizierer laufen. Die Summe der gewichteten „Stimmen“ der Klassifizierer bildet die Endwertung.

halten die n Größe klein auch NB machen hohe Genauigkeit Ergebnis. und der Kern, wie die n Größe erhöht die Genauigkeit verschlechtern

Wählen Sie Eigenschaften, die eine geringere Korrelation zwischen ihnen. Und versucht, verschiedene Kombinationen von Merkmalen mit zu einer Zeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top