2017-08-21 2 views
1

J'essaie d'utiliser predict.boosting pour de nouvelles données dans le paquet adabag. Je ne peux pas trouver un moyen de l'utiliser pour des données sans étiquettes (ou toute autre fonction de ce paquet).Comment lancer predict.boosting pour de nouvelles données?

Je suis en train:

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

Il donne:

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

Cependant, si j'inclure les étiquettes:

pr <- predict.boosting(modelfit, test) 

il fonctionne très bien. Mais il doit y avoir un moyen de l'utiliser comme un modèle prédictif pour les données sans étiquettes.

Merci pour toute aide!

EDIT Exemple de paquet:

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

font un ensemble de données non équilibré en éliminant la plupart des observations de setosa

df <- iris[41:150,] 

créer variable binaire

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

créer indice de négatif Exemples

idx <- df$Setosa == "notsetosa" 

modèle d'exécution

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

Il serait plus facile de vous aider si vous fournissiez un [exemple reproductible] (https: // stackoverflow.com/questions/5963269/comment-faire-un-grand-r-reproductible-exemple) – MrFlick

+0

Merci d'avoir commenté, j'ai ajouté un. – aqua

Répondre

1

Vous devez contrôler que toutes vos colonnes train (l'ensemble que vous avez utilisé pour former le modèle) sont présents dans un test avec le même nom.

S'il vous plaît vérifier:

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

Si c'est faux, vous aurez besoin de contrôler la façon dont vous avez construit train et test.

Si c'est TRUE, et en général, veuillez fournir un exemple reproductible.

Edit:

Une belle façon de contrôler que les colonnes sont les mêmes, et ils contiennent les mêmes facteurs est d'utiliser sameShape du package dataPreparation. Si ce n'est pas le cas, il va ajouter des niveaux et des colonnes (et vous avertir).

Pour l'utiliser:

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

Merci d'avoir répondu. J'ai vérifié, ça donne VRAI. Cela produit seulement une erreur quand j'omets les étiquettes. J'ai donné un exemple ci-dessus. – aqua

+0

Avant d'appliquer votre modèle, vous pouvez utiliser la fonction 'sameShape' du paquet dataPreparation. Il contrôlera que vous avez les mêmes colonnes dans les mêmes niveaux en eux. –

0

je suis venu avec une solution de contournement, je joint une colonne avec le même nom que les étiquettes à mon newdata et qu'il remplit les niveaux de facteur aléatoire.

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

Ensuite, il fonctionne très bien.

+0

Cela pourrait fonctionner mais ce n'est pas une solution générique: / –