2016-12-17 7 views
0

Ich schreibe einen naiven Bayes Klassifikator für ein Klassenprojekt und ich habe es gerade funktioniert ... irgendwie. Während ich eine fehlerfreie Ausgabe bekomme, hatte das gewinnende Ausgabeetikett eine Ausgabewahrscheinlichkeit von 3,89 * 10^-85.Naive Bays Klassifikator: Ausgabe Prozentsatz ist zu niedrig

Wow.

Ich habe ein paar Ideen, was ich falsch machen könnte. Erstens normalisiere ich nicht die Ausgabe-Prozentsätze für die Klassen, so dass alle Prozentsätze effektiv Null sind. Während das mir Zahlen geben würde, die nett aussehen, weiß ich nicht, ob das die richtige Sache ist.

Meine zweite Idee war, die Anzahl der Features zu reduzieren. Unsere Eingabedaten sind eine Liste von Pseudobildern in Form einer sehr langen Textdatei. Momentan sind unsere Funktionen nur der binäre Wert jedes Pixels des Bildes und mit einem 28x28 Bild sind das viele Funktionen. Wenn ich stattdessen das Bild in Blöcke der Größe z. B. 7x7 zerhacke, wie viel würde das tatsächlich die Ausgabe-Prozentsätze verbessern?

tl; dr Hier ist die allgemeinen Dinge, die ich versuche, über naive Bayes zu verstehen:

1) Haben Sie aus Testen jede Klasse, um die Ausgangsprozentsätze normalisieren müssen?

2) Wie viel Effekt hat zu viele Funktionen auf die Ergebnisse?

Vielen Dank im Voraus für jede Hilfe, die Sie mir geben können.

Antwort

3

Es könnte normal sein. Die Ausgabe einer naiven Bucht soll keine reale Wahrscheinlichkeit sein. Was es tun soll, ist eine Punktzahl bei konkurrierenden Klassen zu bestellen.

Der Grund, warum die Wahrscheinlichkeit so niedrig ist, liegt darin, dass viele Naive-Bayes-Implementierungen das Produkt der Wahrscheinlichkeiten aller beobachteten Merkmale der Instanz sind, die klassifiziert wird. Wenn Sie Text klassifizieren, kann jedes Merkmal eine niedrige bedingte Wahrscheinlichkeit für jede Klasse haben (Beispiel: kleiner als 0,01). Wenn Sie 1000er Merkmalswahrscheinlichkeiten multiplizieren, erhalten Sie schnell Zahlen, die Sie gemeldet haben.

Auch die zurückgegebenen Wahrscheinlichkeiten sind nicht die Wahrscheinlichkeiten jeder Klasse, die der Instanz gegeben wird, sondern eine Schätzung der Wahrscheinlichkeiten des Beobachtens dieser Menge von Merkmalen in Anbetracht der Klasse. Je mehr Features Sie haben, desto weniger wahrscheinlich ist es, diese exakten Funktionen zu beobachten. Ein Bayesianisches Theorem wird verwendet, um argmax_c P(class_c|features) zu argmax_c P(class_c)*P(features|class_c) zu ändern, und dann wird die P(features|class_c) weiter vereinfacht, indem eine Unabhängigkeitsannahme gemacht wird, die es erlaubt, das zu einem Produkt der Wahrscheinlichkeiten des Beobachtens jedes individuellen Merkmals der gegebenen Klasse zu ändern. Diese Annahmen ändern nicht die Argmax (die gewinnende Klasse).

Wenn ich Sie wäre, wäre mir die Wahrscheinlichkeitsausgabe nicht wirklich wichtig, konzentrieren Sie sich stattdessen auf die Genauigkeit Ihres Klassifikators und ergreifen Sie Maßnahmen, um die Genauigkeit zu verbessern, nicht die berechneten Wahrscheinlichkeiten.

+0

Ich uploated, aber was meinst du mit "echte Wahrscheinlichkeit"? –

+0

Es ist nicht die reale Klassenwahrscheinlichkeit gegeben die Merkmale und vorher. Es ist nur ein Wert, der beim Sortieren der Scores sinnvoll ist. In den verschiedenen Vereinfachungen und Annahmen, die von den meisten Implementierungen gemacht werden, ist die Bedeutung von "Wahrscheinlichkeit" verloren, und dies ist in Ordnung, da es ein Klassifikator ist und wir die beste Klasse finden wollen. –

+1

Das heißt, wenn Sie Werte haben möchten, die lesbarer sind, können Sie sie normalisieren (teilen Sie jedes Ergebnis durch die Summe aller Klassenwerte). –

Verwandte Themen