2017-12-13 2 views
0

Ich bin neu im Textmining.Wie kann die Bezeichnung eines neuen Datensatzes vorhergesagt werden, wenn nicht alle Merkmale des Trainingssatzes abgedeckt sind?

Ich habe einen Datensatz von SMS und ich möchte herausfinden, ob etwas Spam ist oder nicht. Ich benutzte Quanteda, um meinen Textinhalt in eine Matrix von Wörtern zu verwandeln. Ich entfernte auch Stoppwörter, konvertierte die Wörter in Wortsätze und trainierte ein Modell mit

rpart.cv.1 <- train(Label ~ ., data = train_tokens_df, method = "rpart", trControl = cv_cntrl, tuneLength = 5).

Jetzt möchte ich die Bezeichnung von Testdaten vorhersagen. Ich habe alle Vorverarbeitungsschritte mit den Zugdaten gemacht. Das Problem ist, ich habe Worte in meinen Zugdaten, die die Testdaten nicht abdecken.

Meine Vermutung ist, dass der nächste Schritt darin bestehen sollte, alle Spalten der Trainingsdaten hinzuzufügen, die in den Testdaten fehlen. Aber wie geht das einfach und effizient? Trainieren und Testen sind in meinem Fall beide Datenfelder.

+0

Sie können eine geschichtete Stichprobe verwenden, um sicherzustellen, dass jedes Wort Zug- und Testzeilen enthält. Denken Sie auch zuerst darüber nach, was Sie mit Wörtern tun werden, die nur einmal vorkommen. Diese werden definitiv zu den Zug- oder Testdaten gehören. – AntoniosK

+0

Ich habe geschichtete Stichproben durchgeführt, aber ich weiß, dass ich Daten voraussagen möchte, von denen ich die Bezeichnung nicht kenne. – Burschken

+0

Wenn Sie in Ihren Zugdaten kein Etikett haben, ist es nicht möglich, das Modell in diesen Reihen zu trainieren. Wenn Sie in Ihren Zugdaten kein Etikett haben, können Sie die Genauigkeit dieser Zeilen nicht überprüfen. Label ist deine Zielvariable wenn ich richtig verstanden habe, oder? Warum nicht Zeilen ohne Zielvariable ausschließen? Sie können nicht verwendet werden. – AntoniosK

Antwort

0

Es gibt wohl einige Trick mit data.table, aber wenn man zwei data.frame und wollen einfach nur „Teilmenge“, die zweite auf den Spaltennamen der ersten, füllt Spalten in fehlt, können Sie wie folgt vorgehen:

orig = data.frame(a = 1:3, b = 2:4) # example data 
new = data.frame(a = 7:9, c = 11:13) # missing the 'b' column 

# first insert new columns that are still missing in 'new': 
new[setdiff(colnames(orig), colnames(new))] = 0 # NA, or whatever 
# now subset the new dataset to the columns of the old one 
new = new[colnames(orig)] 

Dies gibt Ihnen

> new 
    a b 
1 7 0 
2 8 0 
3 9 0 

Beachten Sie, dass dies funktioniert nur mit data.frame, nicht mit matrix, wenn Sie also eine Matrix haben Sie tun müssen

new = as.data.frame(new) 

zuerst.

Verwandte Themen