Für ein großes Dataset Textklassifikationsproblem, habe ich verschiedene Klassifikatoren wie LDA, RandomForest, KNN usw. verwendet und Genauigkeitsraten von 78-85% erhalten. Multinomiale Naive Bayes mit bnlearn ergaben jedoch eine Genauigkeit von 97%. Untersucht, warum die Genauigkeit so hoch ist und das Problem scheint mit der Vorhersage in bnlearn - vielleicht habe ich die falschen Parameter verwendet.Multinomiale Naive Bayes in bnlearn, Vorhersage Klärung
Veranschaulichung mit einem Beispieldatensatz.
Long Sweet Yellow Fruit
Yes Yes Yes Banana
Yes Yes Yes Banana
Yes Yes Yes Banana
Yes Yes Yes Banana
No Yes Yes Banana
No Yes Yes Orange
No Yes Yes Orange
No Yes Yes Orange
Yes Yes Yes Other
No Yes No Other
Yes Yes Yes Banana
Yes Yes Yes Banana
Yes No Yes Banana
Yes No No Banana
No No Yes Banana
No No Yes Orange
No No Yes Orange
No No Yes Orange
Yes Yes No Other
No No No Other
Yes Yes Yes Banana
No Yes Yes Banana
No Yes Yes Orange
No Yes Yes Orange
No Yes No Other
Obiges ist ein Datensatz von 25 Zeilen als Datenrahmen geladen bn.X
Dies kann in eine Reihe 20 Trainingsdatensatz und 5 Zeile Testdatensatz aufgeteilt werden.
Schritt 1: Laden der Daten
Y=bn.X[,4] # Outcome column
train=1:20
cols=1:4
bn.X[,cols] <- data.frame(apply(bn.X[cols], 2, as.factor))
trainbn.X=bn.X[train,]
testbn.X=bn.X[-train,]
trainbn.Y=Y[train]
testbn.Y=Y[-train]
Schritt 2: Klassifizierung mit bnlearn
library(bnlearn)
NB.fit = naive.bayes(trainbn.X, "Fruit")
# Prediction
NB.pred=predict(NB.fit,testbn.X,prob=TRUE)
writeLines("\n Multinomial Naive Bayes\n")
table(NB.pred, testbn.Y)
cat("Accuracy %:", mean(NB.pred == testbn.Y)*100)
Schritt 3: Classification LDA Verwendung
library(MASS)
lda.fit=lda(Fruit~.,data=trainbn.X)
# Prediction
lda.pred=predict(lda.fit,testbn.X)
lda.class=lda.pred$class
writeLines("\n LDA \n")
table(lda.class,testbn.Y)
cat("Accuracy %:", mean(lda.class == testbn.Y)*100)
Sowohl bnlearn Naive Bayes und LDA geben die gleiche Vorhersage mit 80% Genauigkeit für die 5 Zeilen.
Allerdings scheint bnlearn die Ergebniswerte der Testreihen auch für die Vorhersage zu verwenden. Dies scheint der Grund zu sein, warum ich einen hohen Genauigkeitswert für das Textklassifizierungsszenario, an dem ich arbeitete, erhalten habe.
Wenn ich irgendeine der folgenden vor Vorhersage,
testbn.X$Fruit=NA
testbn.X$Fruit="Orange"
testbn.X[1:3,]$Fruit="Orange"
Es gibt keine Auswirkungen auf die Ergebnisse von LDA - LDA vollständig die Ergebnis-Werte der Testdaten ignoriert, wenn zur Verfügung gestellt. Das ist ein ideales Verhalten.
Für bnlearn ist dies jedoch nicht der Fall. Während der Vorhersage wird ein Fehler für NA und alle Werte = "Orange" empfangen. Und für die 3. Datenmanipulation, liefert bnlearn Vorhersage ein völlig anderes Ergebnis
Frage: Ist die Art und Weise, die ich verwendet habe, die Vorhersagefunktion von bnlearn richtig? Sollte ich andere Parameter verwenden?
Dank Mikko für Eure Hilfe. Ich konnte die erwarteten Ergebnisse basierend auf Ihrer Antwort erhalten. Für mein ursprüngliches Problem sank die Genauigkeit auf 80%, was im selben Bereich liegt wie die anderen Klassifikatoren. – Siddharth
@Siddharth Brilliant, froh, ich könnte helfen! –