2016-08-16 3 views
0

Ich richte einen Naive Bayes Classifier ein, um zu versuchen, die Gleichheit zwischen zwei Datensätzen mit fünf Stringeigenschaften zu bestimmen. Ich vergleiche jedes Eigenschaftenpaar nur genau (d. H. Mit einer java .equals() -Methode). Ich habe einige Trainingsdaten, sowohl TRUE- als auch FALSE-Fälle, aber konzentrieren wir uns jetzt nur auf die TRUE-Fälle.Sollten 'trügerische' Trainingsfälle einem Naive Bayes Classifier übergeben werden

Angenommen, es gibt einige TRUE-Trainingsfälle, bei denen alle fünf Eigenschaften unterschiedlich sind. Das bedeutet, dass jeder Komparator versagt, aber die Aufzeichnungen werden nach einer menschlichen Einschätzung als "gleich" eingestuft.

Sollte dieser Trainingskoffer dem Naive Bayes Classifier zugeführt werden? Auf der einen Seite, angesichts der Tatsache, dass NBC jede Variable separat behandelt, sollten diese Fälle es nicht vollständig brechen. Es scheint jedoch richtig zu sein, dass eine ausreichende Zufuhr dieser Fälle für die Leistung des Klassifikators nicht vorteilhaft wäre. Ich verstehe, dass eine Menge dieser Fälle bedeuten würde, dass bessere Vergleicher erforderlich sind, aber ich frage mich, was ich in der Zeit tun sollte. Eine andere Überlegung ist, dass die Kehrseite unmöglich ist; Das heißt, es gibt keine Möglichkeit, dass alle fünf Eigenschaften zwischen zwei Datensätzen gleich sein können, und sie müssen immer noch "unterschiedliche" Datensätze sein.

Ist dies ein Vorzugsproblem, oder gibt es eine endgültige akzeptierte Praxis für den Umgang damit?

+0

Es scheint mir, dass ein Lernalgorithmus nur dann angewendet werden sollte, wenn er die richtige Unterscheidung ermöglicht. Wenn es TRUE-Fälle gibt, die der Algorithmus nicht erkennen kann, wie Sie sagten, sollte er verbessert werden. Wenn das Problem auf menschliche Eingaben zurückzuführen ist, können Sie versuchen, es zu standardisieren, indem Sie alle Sonderzeichen entfernen und alle Buchstaben in Groß- oder Kleinbuchstaben ändern.Sie können auch einen differenzierteren Vergleich verwenden und versuchen, häufig auftretende Tippfehler oder Rechtschreibfehler zu entfernen. –

Antwort

0

Normalerweise sollten Sie einen Trainingsdatensatz haben, der so repräsentativ wie möglich für die Domäne ist, von der Sie Beobachtungen klassifizieren möchten (oft jedoch schwierig). Ein nicht repräsentativer Satz kann zu einem schlecht funktionierenden Klassifikator führen, insbesondere in einer Produktionsumgebung, in der verschiedene Daten empfangen werden. Davon abgesehen kann die Vorverarbeitung dazu verwendet werden, die Exposition eines Klassifikators zu begrenzen, der auf eine bestimmte Teilmenge von Daten trainiert wird, so dass sie in hohem Maße vom Zweck des Klassifikators abhängig ist.

Ich bin nicht sicher, warum Sie einige Elemente obwohl ausschließen möchten. Die Parameterschätzung/das Lernen sollte der Tatsache Rechnung tragen, dass zwei verschiedene Eingaben auf die gleiche Ausgabe abgebildet werden können - deshalb würden Sie maschinelles Lernen verwenden, anstatt einfach eine Hash-Map zu verwenden. Wenn man bedenkt, dass Sie in der Regel nicht über alle Daten verfügen, um Ihr Modell zu erstellen, müssen Sie sich auf diese Art von Inferenz verlassen.

Haben Sie sich die NLTK angesehen; Es ist in Python, aber es scheint, dass OpenNLP ein geeigneter Ersatz in Java sein kann? Sie können bessere Feature-Extrahierungstechniken verwenden, die zu einem Modell führen, das kleinere Variationen in Eingabezeichenfolgen berücksichtigt (siehe here).

Schließlich scheint es mir, dass du ‚gleichen‘ eine Zuordnung von Eingabezeichenfolgen auf die Klassen lernen wollen und ‚nicht gleichen‘ --- Sie scheinen ein Abstandsmaß ableiten zu wollen (nur Kontrolle). Es wäre sinnvoller, Anstrengungen zu unternehmen, um direkt eine bessere Maßnahme zu finden (z. B. für Probleme bei der Zeichenumsetzung, die Sie verwenden könnten edit distances). Ich bin mir nicht sicher, ob NB für Ihr Problem gut geeignet ist, da es versucht, eine Klasse anhand einer Beobachtung (oder ihrer Merkmale) zu bestimmen. Diese Klasse muss über verschiedene Strings erkennbar sein (ich gehe davon aus, dass Sie string1 & string2 verketten und dem Klassifikator anbieten). Wird genügend Struktur vorhanden sein, um eine solche weithin anwendbare Eigenschaft abzuleiten? Dieser Klassifikator muss grundsätzlich in der Lage sein, mit allen paarweisen "Vergleichen" fertig zu werden, es sei denn, Sie erstellen NBs für jede Paarung zwischen einem Paar und einem Paar. Dies scheint kein einfacher Ansatz zu sein.

Verwandte Themen