2017-12-04 13 views
1

Ich erhalte einen Fehler von meiner Dataset ähnlichen Logik mit dem Code, den ich unten bekannt gab. Ich habe versucht die Anzahl der Trainingsdaten zu erhöhen aber nicht gelöst. Ich habe bereits alle Werte ausgeschlossen.R: Faktor als neue Ebene, wenn ich mit Testdaten voraussage

Fehler in model.frame.default (Begriffe newdata, na.action = na.action, xlev = Objekt $ xlevels): Faktor y neue Ebenen L hat, X

set.seed(234) 
d <- data.frame(w=abs(rnorm(50)*1000), 
      x=rnorm(50), 
      y=sample(LETTERS[1:26], 50, replace=TRUE)) 



train_idx <- sample(1:nrow(d), floor(0.8*nrow(d))) 
train <- d[train_idx,] 
test <- d[-train_idx,] 



fit <- lm(w ~x + y, data=train) 
predict(fit, test) 

Antwort

1

Wie @jdobres hat bereits erklärt, den Grund, warum dieser Fehler tauchte ich ohne weiteres auf den Lösungsansatz springen werden:

die unter Codezeile Versuchen wir kurz vor predict Anweisung

#add all levels of 'y' in 'test' dataset to fit$xlevels[["y"]] in the fit object 
fit$xlevels[["y"]] <- union(fit$xlevels[["y"]], levels(test[["y"]])) 

Hoffnung Das würde dein Problem lösen!

+0

Sie haben nicht erklärt, was dies für das OP tut. – zacdav

+0

@zacdav das ist der Grund, auf den ich die Antwort von jdobres referenziert habe :) Es ist die Lösung genau desselben Problems, was er erklärt hat - dh das Hinzufügen der Stufen von 'test' zu' fit' Modell, weil wenige Ebenen nicht da waren als 'train' didn Ich habe das. Prost! – Prem

+0

Vielen Dank! Das hat das Problem gelöst! – joerna

2

Faktor- und Zeichendaten werden als kategorische Variablen behandelt. Daher können Modelle keine Vorhersagen für Kategorielabels erstellen, die sie noch nie zuvor gesehen haben. Wenn Sie ein Modell erstellen, um Dinge über "Pudel" und "Pitbull" vorherzusagen, würde das Modell scheitern, wenn Sie es "Golden Retriever" geben würden.

Spezifischer für Ihr Beispiel, der Fehler sagt Ihnen, dass die Etiketten "L" und "X", die in Ihrem Testset sind, nicht in Ihrem Trainingssatz erscheinen. Da sie nicht im Trainingssatz waren, weiß das Modell nicht, was zu tun ist, wenn es im Test auf diese trifft.

Verwandte Themen