2017-08-21 4 views
1

Ich versuche Predict.boosting für neue Daten im Adabag-Paket zu verwenden. Ich kann keine Möglichkeit finden, es für Daten ohne Labels (oder irgendeine andere Funktion aus diesem Paket) zu verwenden.Wie wird predict.boosting für neue Daten ausgeführt?

Ich versuche:

pr <- predict.boosting(modelfit, test[,2:ncol(test)]) 

Es gibt:

Error in `[.data.frame`(newdata, , as.character(object$formula[[2]])) : 
    undefined columns selected 

Wenn ich jedoch Markierungen umfassen:

pr <- predict.boosting(modelfit, test) 

es funktioniert gut. Aber es muss einen Weg geben, es als Vorhersagemodell für Daten ohne Labels zu verwenden.

Danke für jede Hilfe!

EDIT Beispiel von Paket:

library(rusboost) 
library(rpart) 
data(iris) 

es einen unsymmetrischen Datensatzes, indem die meisten der setosa Beobachtungen

Entfernen
df <- iris[41:150,] 

schaffen Binärvariable

df$Setosa <- factor(ifelse(df$Species == "setosa", "setosa", "notsetosa")) 

Index von negativen erstellen Beispiele

idx <- df$Setosa == "notsetosa" 

Lauf Modell

test.rusboost <- rusb(Setosa ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, 
         data = df, boot = F, iters = 20, sampleFraction = .1, idx = idx) 

predict.boosting(test.rusboost, df) 
predict.boosting(test.rusboost, df[,1:4) 
+0

Es wäre einfacher, Ihnen zu helfen, wenn Sie ein [reproduzierbares Beispiel] (https: // stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproduzierbar-Beispiel) – MrFlick

+0

Danke für die Kommentare, ich habe eine hinzugefügt. – aqua

Antwort

1

sollten Sie kontrollieren, dass alle Ihre Spalten in train (Set Sie das Modell trainieren verwendet) sind in test einem mit dem gleichen Namen.

Bitte überprüfen Sie:

all(colnames(train) %in% colnames(test)) 

Wenn es falsch ist, müssen Sie steuern, wie Sie trainieren und testen gebaut.

Wenn es wahr ist, und allgemein, bitte geben Sie ein reproduzierbares Beispiel an.

Edit:

Eine nette Weise zu steuern, dass Spalten gleich sind, und sie enthalten die gleichen Faktoren sameShape von dataPreparation Paket zu verwenden ist. Wenn es nicht das Cas ist, wird es Ebenen und Spalten hinzufügen (und Sie warnen).

es zu benutzen:

library(dataPreparation) 
test <- sameShape(test, train) 
+0

Danke für die Antwort. Ich habe überprüft, es gibt TRUE. Es erzeugt nur Fehler, wenn ich die Etiketten weglasse. Ich habe oben ein Beispiel gegeben. – aqua

+0

Bevor Sie Ihr Modell anwenden, können Sie die Funktion 'sameShape' aus dem dataPreparation-Paket verwenden. Es kontrolliert, dass Sie dieselben Spalten haben, die dieselben Ebenen haben. –

0

ich mit einer Vermeidung des Problems kam, brachte ich eine Spalte mit dem gleichen Namen wie die Etiketten auf meine newdata und füllte es mit Zufallsfaktor Ebenen.

df$Setosa <- factor(sample(c("setosa", "notsetosa"), nrow(df), replace=TRUE, prob=c(0.5, 0.5))) 

Dann funktioniert es gut.

+0

Es könnte funktionieren, aber es ist keine generische Lösung: / –

Verwandte Themen