Wie kann man eine fehlende kategoriale Prädiktorvariable für ein zufälliges Waldmodell unterstellen?

8

Ich habe eine Reihe von x, y-Daten, die ich zum Erstellen einer zufälligen Gesamtstruktur verwende. Die x-Daten sind ein Wertevektor, der einige NAs enthält. Also verwende ich rfImputedie fehlenden Daten und erstelle eine zufällige Gesamtstruktur. Jetzt habe ich eine neue unsichtbare Beobachtung x (mit einer NA) und möchte y vorhersagen. Wie rechne ich den fehlenden Wert an, damit ich den zufälligen Wald verwenden kann, den ich bereits gewachsen bin? Die rfImputeFunktion scheint x und y zu erfordern. Ich habe nur x für Vorhersagezwecke.

Meine Frage ist dieser Frage ähnlich (aber anders) . Und zum Beispiel kann ich den gleichen Iris-Datensatz verwenden. Wenn ich den Code in der Antwort auf die Frage, auf die ich verweise, richtig interpretiert habe, repräsentiert der Code iris.na[148, , drop=FALSE]in der Anweisung iris.na2 = rbind(iris.imputed, iris.na[148, , drop=FALSE])die neuen Daten, die den Species(Y-Wert) enthalten. In meinem Problem würde ich das nicht wissen - ich möchte Speciesden zufälligen Wald verwenden, um das vorherzusagen. Ich hätte die 4 unabhängigen Variablen, aber einige könnten NAfür eine bestimmte Zeile sein. Um die Analogie fortzusetzen, stellen Sie sich vor, ich habe 3 der 4 Variablen (eine fehlt). Ich möchte diesen Wert unterstellen. Dann möchte ich die Arten vorhersagen, die ich nicht kenne.

Als Antwort auf Gungs Kommentar, dass ich eine Illustration hinzufügen sollte, möchte ich sie in Bezug auf den Iris-Datensatz formulieren. Stellen Sie sich vor, ich habe die folgenden Daten zu einer Blume. Ich weiß , es ist Sepal.Length, Sepal.Width, Petal.Length, aber nicht das Petal.Width. Ich möchte das unterstellen Petal.Widthund dann diese 4 Werte innerhalb eines RF-Modells verwenden, um das vorherzusagen Species.

rmacey
quelle
Wollen Sie damit sagen, dass Sie nichts haben ? Sie beginnen mit nur x & y, um ein Modell zu erstellen, und jetzt möchten Sie y für eine Beobachtung vorhersagen, für die Sie weder x noch y haben. Ist das korrekt?
Gung - Reinstate Monica
Gung, ich habe etwas. Ich habe eine neue x-Beobachtung, aber keine y. Ich möchte das y basierend auf dem neuen x vorhersagen. Aber der x-Vektor hat einige NA-Werte, die ich unterstellen möchte. Vielen Dank.
rmacey
Ich verstehe, also ist x eine Reihe von Prädiktorvariablen, bei denen Sie einige, aber keine anderen haben. Ist das richtig? Möglicherweise möchten Sie Ihr Q aktualisieren (wodurch es auf der Hauptseite angezeigt wird), und Sie möchten möglicherweise ein kleines anschauliches Beispiel hinzufügen. Ein Hinweis zur Vorsicht: Dieses Q befindet sich am Rand von "Wie verwende ich R?" & / oder 'Welcher Code hilft mir dabei?', der als programmiert betrachtet wird & könnte geschlossen werden. Sie sollten sicherstellen, dass klar ist, dass dies eine Frage zu RF ist, nicht wie RF mit R.
Gung - Reinstate Monica
LOL ... als ich es auf einfachen Stapeltausch stellte, schlugen sie vor, es hierher zu verschieben. Hier geht es wirklich um rfImpute oder ähnliches.
rmacey
Mit „Normalstapelaustausch“, meinen Sie Stack - Überlauf ? Wenn Ihre Frage lautet, wie der Code verwendet werden soll, wird er dort abgelegt. Wenn es darum geht, die zugrunde liegenden Statistiken zu verstehen, finden Sie sie hier. (Natürlich gibt es auch Fragen, die an beiden Stellen nicht zum Thema gehören.) Ich glaube nicht, dass Ihre Fragen hier unbedingt nicht zum Thema gehören. Ich informiere Sie nur, um vorsichtig zu sein, wie Sie es ausdrücken, damit klar ist, dass es sich um eine statistische Frage handelt, nicht um eine Kodierungsfrage.
Gung - Reinstate Monica

Antworten:

4

Ich denke, Sie brauchen eine unbeaufsichtigte Anrechnungsmethode. Dies ist eine, die die Zielwerte nicht für die Imputation verwendet. Wenn Sie nur wenige Vorhersage-Merkmalsvektoren haben, kann es schwierig sein, eine Datenstruktur aufzudecken. Stattdessen können Sie Ihre Vorhersagen mit bereits unterstellten Trainingsmerkmalsvektoren mischen und diese Struktur verwenden, um erneut zu unterstellen. Beachten Sie, dass dieses Verfahren möglicherweise gegen die Annahme der Unabhängigkeit verstößt. Wickeln Sie daher das gesamte Verfahren in eine äußere Kreuzvalidierung ein, um eine ernsthafte Überanpassung festzustellen.

Ich habe gerade aus einem Kommentar zu dieser Frage von missForest erfahren . missForest scheint den Trick zu machen. Ich habe Ihr Problem mit den Irisdaten simuliert. (ohne äußere Kreuzvalidierung)

rm(list=ls())
data("iris")
set.seed(1234)
n.train = 100
train.index = sample(nrow(iris),n.train)
feature.train = as.matrix(iris[ train.index,1:4])
feature.test  = as.matrix(iris[-train.index,1:4])


#simulate 40 NAs in train
n.NAs = 40
NA.index = sample(length(feature.train),n.NAs)
NA.feature.train = feature.train; NA.feature.train[NA.index] = NA

#imputing 40 NAs unsupervised
library(missForest)
imp.feature.train = missForest(NA.feature.train)$ximp
#check how well imputation went, seems promsing for this data set
plot(    feature.train[NA.index],xlab="true value",
     imp.feature.train[NA.index],ylab="imp  value",)

#simulate random NAs in feature test
feature.test[sample(length(feature.test),20)] = NA

#mix feature.test with imp.feature.train
nrow.test = nrow(feature.test)
mix.feature = rbind(feature.test,imp.feature.train)
imp.feature.test = missForest(mix.feature)$ximp[1:nrow.test,]

#train RF and predict
library(randomForest)
rf = randomForest(imp.feature.train,iris$Species[train.index])
pred.test = predict(rf,imp.feature.test)
table(pred.test, iris$Species[-train.index])

Printing...
-----------------
pred.test    setosa versicolor virginica
  setosa         12          0         0
  versicolor      0         20         2
  virginica       0          1        15
Soren Havelund Welling
quelle