Naive-Bayes-Klassifikator für ungleiche Gruppen


8

Ich verwende einen naiven Bayes-Klassifikator, um zwischen zwei Datengruppen zu klassifizieren. Eine Gruppe der Daten ist viel größer als die andere (über 4 Mal). Ich verwende die vorherige Wahrscheinlichkeit jeder Gruppe im Klassifikator.

Das Problem ist, dass das Ergebnis, das ich erhalte, eine wahre positive Rate von 0% und eine falsche positive Rate von 0% aufweist. Ich habe die gleichen Ergebnisse erzielt, als ich die Werte vor 0,5 und 0,5 eingestellt habe.

Wie kann ich meine Schwelle auf etwas Besseres einstellen, um ausgewogenere Ergebnisse zu erzielen?

Ich hatte ein ähnliches Problem bei der Verwendung des Logistic Regression-Klassifikators. Ich habe es gelöst, indem ich den vorherigen Term von der Verzerrung abgezogen habe.

Wenn ich Fisher Linear Discriminant für diese Daten verwende, erhalte ich gute Ergebnisse mit dem in der Mitte festgelegten Schwellenwert.

Ich gehe davon aus, dass es eine gemeinsame Lösung für dieses Problem gibt, ich konnte sie einfach nicht finden.

UPDATE: Ich habe gerade bemerkt, dass der Klassifikator überpasst. Die Leistung am Trainingsset ist perfekt (100% korrekt).

Wenn ich gleiche Gruppen verwende, beginnt der Klassifizierer auch mit der Klassifizierung in die "kleine" Gruppe, aber die Leistung ist ziemlich schlecht (schlechter als FLD oder LR).

UPDATE2: Ich denke, das Problem war, dass ich die vollständige Kovarianzmatrix verwendet habe. Das Laufen mit diagonaler Kovarianzmatrix führte zu "ausgeglicheneren" Ergebnissen.


0% wahr positiv und 0% falsch positiv? Es muss alles in die andere Gruppe eingeordnet werden, dann ... versuchen Sie, Ihren Prior für die "positive" Gruppe auf 80% zu setzen. Aber zuerst überprüfen Sie, um zu sehen, dass Sie nicht irgendwo im Code einen Fehler machen ...
Jbowman

Vielleicht ist der Prior zu groß / klein? (einige Probleme mit Gleitkomma-Arithmetik?)
Dov

Antworten:


7

Das Zuweisen aller Muster zur negativen Klasse ist sicherlich kein "seltsames Ergebnis". Es kann sein, dass der optimale Bayes-Klassifikator immer alle Muster als zur Mehrheitsklasse gehörend klassifiziert. In diesem Fall tut Ihr Klassifikator genau das, was er tun sollte. Wenn die Dichte der zur positiven Klasse gehörenden Muster niemals die Dichte der zur negativen Klasse gehörenden Muster überschreitet, ist die negative Klasse unabhängig von den Attributwerten wahrscheinlicher.

Unter solchen Umständen ist es wichtig, die relative Bedeutung falsch positiver und falsch negativer Fehler zu berücksichtigen. In der Praxis ist es selten, dass die Kosten der beiden verschiedenen Fehlertypen gleich sind. Bestimmen Sie also den Verlust für falsch positive und falsch negative Fehler und berücksichtigen Sie diese bei der Festlegung der Schwellenwahrscheinlichkeit (unterschiedliche Fehlklassifizierungskosten entsprechen der Änderung der vorherigen Wahrscheinlichkeiten, sodass dies für naive Bayes einfach zu implementieren ist). Ich würde empfehlen, die Prioritäten zu optimieren, um die Kreuzvalidierungsschätzung des Verlusts zu minimieren (unter Berücksichtigung Ihrer ungleichen Fehlklassifizierungskosten).

Wenn Ihre Fehlklassifizierungskosten gleich sind und Ihre Schulungssätze für die Betriebsbedingungen repräsentativ sind, ist es möglich, dass Sie bereits über den besten NB-Klassifizierer verfügen, sofern Ihre Implementierung korrekt ist.


Überprüfen Sie bitte mein Update. Mein Klassifikator ist überpassend. Wenn ich gleiche Gruppen verwende, verhält sich der Klassifikator auf jeden Fall besser, hat aber immer noch eine geringe Leistung. Das Ändern des Schwellenwerts (Prioritäten) wirkt sich überhaupt nicht auf die Leistung aus, wenn eine Gruppe viel größer ist. danke
Ran

1
@Ran Ich kann das Gefühl nicht loswerden, dass hier etwas fehlt.1. Können Sie bitte die AUC jedes Klassifikators angeben? 2. Wie viele positive / negative Instanzen haben Sie pro Klasse? 3. Wie haben Sie den Klassifikator validiert? Welcher-k-Falte-Lebenslauf? klo? 3. Es ist zu beachten, dass die Natur von NB darin besteht, extreme Wahrscheinlichkeiten p (Klasse | x) nahe 0 oder 1 zu erzeugen, so dass man die beste Entscheidungsschwelle finden muss, dh t, so dass p (Klasse = 1 | x)> t => Klasse 1, sonst Klasse 0. Das Finden einer solchen Entscheidungsschwelle entspricht dem Anpassen der Prioritäten.
steffen

@Ran das Ändern der Prioritäten muss sich auf die Leistung auswirken;). Wenn kleine Änderungen nicht helfen, versuchen Sie es mit extremen Änderungen.
steffen

2
@Ran, es ist schwierig zu bestimmen, wo das Problem liegt, ohne zusätzliche Informationen über die Größe des Trainingssatzes, die Art der Attribute usw. zu haben. Eines fällt jedoch ein: NB hat ein Problem, wenn die bedingten Wahrscheinlichkeiten jemals Null sind In diesem Fall ist die Ausgabe unabhängig von den Werten anderer Attribute Null. Sind die Wahrscheinlichkeiten für die Minderheitsklasse immer genau Null? Wenn dies der Fall ist, kann dies das Problem sein. In diesem Fall kann die Verwendung der Laplace-Korrektur zur Schätzung der bedingten Wahrscheinlichkeiten hilfreich sein.
Dikran Beuteltier

0

Vergrößern Sie die kleinere Datengruppe durch Berechnung, um sie an die große Gruppe anzupassen. Dadurch werden die Daten der kleineren Gruppe gestreckt, es wird jedoch eine gleichmäßigere Berechnung ermöglicht.

Wenn Sie immer noch seltsame Ergebnisse erhalten, wie Sie es derzeit tun, überprüfen Sie Ihre gesamte Implementierung von Anfang an, um einen (wahrscheinlich einfachen) Fehler zu finden.


Was meinst du mit "Vergrößere die kleineren Daten ... durch Berechnung"? kannst du das weiter erklären
Dov

Alles als zur negativen Klasse gehörig zu klassifizieren ist kein seltsames Ergebnis, manchmal ist das das Richtige, weil die Dichte negativer Muster immer die Dichte positiver Muster überall übersteigt.
Dikran Marsupial
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.