Ich habe einige sehr ärgerliche Probleme bekommen einen Naive Bayes Classifier mit einer Dokument-Term-Matrix zu arbeiten. Ich bin mir sicher, dass ich einen sehr einfachen Fehler mache, aber ich kann nicht herausfinden, was es ist. Meine Daten stammen aus Account-Tabellen. Ich wurde gebeten, herauszufinden, welche Kategorien (im Textformat: meist Namen von Abteilungen oder Namen von Budgets) eher Geld für Wohltätigkeitsorganisationen ausgeben und welche meistens (oder nur) für private Unternehmen ausgegeben werden. Sie schlugen vor, dass ich Naive Bayes-Klassifikatoren verwende, um dies zu tun. Ich habe etwa tausend Datenzeilen, um ein Modell und viele hunderttausend Zeilen zu trainieren, um das Modell zu testen. Ich habe die Strings vorbereitet, Leerzeichen durch Unterstriche und ands/& s durch + ersetzt, dann jede Kategorie als einen Begriff behandelt: so wird 'Alkohol- und Drogensucht': Alkohol + Drogensucht.Dokument Term Matrix für Naive Bayes classfier: unerwartete Ergebnisse R
Einige Beispiel Reihen:
"environment+housing strategy+commissioning third_party_payments supporting_ppl_block_gross_chargeable" -> This row went to a charity
"west_north_west customer+tenancy premises h.r.a._special_maintenance" -> This row went to a private company.
this example als Vorlage verwenden, schrieb ich die folgende Funktion mit meinem Dokument Begriff Matrix zu kommen (tm verwenden), sowohl für Trainings- und Testdaten.
library(tm)
library(e1071)
getMatrix <- function(chrVect){
testsource <- VectorSource(chrVect)
testcorpus <- Corpus(testsource)
testcorpus <- tm_map(testcorpus,stripWhitespace)
testcorpus <- tm_map(testcorpus, removeWords,stopwords("english"))
testmatrix <- t(TermDocumentMatrix(testcorpus))
}
trainmatrix <- getMatrix(traindata$cats)
testmatrix <- getMatrix(testdata$cats)
So weit, so gut. Das Problem ist, wenn ich versuche, a) ein naives Bayes-Modell anzuwenden und b) von diesem Modell vorherzusagen. Verwenden klar Paket - Ich bekomme eine Null Wahrscheinlichkeit Fehler, da viele der Begriffe Null Instanzen einer Kategorie haben und herumspielen mit den Laplace-Bedingungen scheint dies nicht zu beheben. Mit E1071 arbeitete das Modell, aber wenn ich dann getestet unter Verwendung des Modells:
model <- naiveBayes(as.matrix(trainmatrix),as.factor(traindata$Code))
rs<- predict(model, as.matrix(testdata$cats))
... jeder einzelne Artikel der gleichen Kategorie vorhergesagt, obwohl sie in etwa gleich sein sollte. Etwas im Modell funktioniert eindeutig nicht. Betrachtet man einige der Begriffe in Modell $ -Tabellen - kann ich sehen, dass viele hohe Werte für private und null für Wohltätigkeit und andere umgekehrt haben. Ich habe als Faktor für den Code verwendet.
output:
rs 1 2
1 0 0
2 19 17
Irgendwelche Ideen, was schief läuft? Spielen dtm Matrizen nicht gut mit naivebayes? Habe ich bei der Aufbereitung der Daten einen Schritt verpasst? Ich habe keine Ideen mehr. Hoffe das ist alles klar. Glücklich zu klären, wenn nicht. Irgendwelche Vorschläge würden sehr geschätzt.
ich mit einem multinomial Bayes-Klassifikator ein identisches Problem habe. Einige Daten werden korrekt zugewiesen, aber die meisten enden in einer Klasse. Die Klasse, die falsch gefüllt wird, wechselt abhängig von der Größe der Eingabedaten. Ich habe auch versucht, die Daten zu wiederholen, um [dieses] Problem zu vermeiden (http://stackoverflow.com/questions/17904190/why-does-naivebayes-return-all-nas-for-multiclass-classification-in-r) aber die Mehrheit endet immer noch in einer Klasse – christopherlovell