如何为新数据运行predict.boosting?

时间:2017-08-21 14:50:55

标签: r prediction adaboost

我正在尝试对adabag包中的新数据使用predict.boosting。我无法找到一种方法将其用于没有标签的数据(或该软件包中的任何其他功能)。

我在尝试:

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

它给出了:

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

但是,如果我包含标签:

pr <- predict.boosting(modelfit, test)

它运作得很好。但必须有一种方法可以将其用作没有标签的数据的预测模型。

感谢您的帮助!

EDIT 包中的示例:

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

通过删除大部分setosa观察值使其成为不平衡的数据集

df <- iris[41:150,]

创建二进制变量

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

创建负面例子的索引

idx <- df$Setosa == "notsetosa"

运行模型

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)

2 个答案:

答案 0 :(得分:1)

您应该控制train(用于训练模型的集合)中的所有列都存在于test和同名中。

请检查:

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

如果这是假的,你需要控制你如何建造火车和测试。

如果它是真的,一般来说,请提供一个可重复的例子。

修改

控制列的一种很好的方法是相同的,它们包含相同的因素是使用dataPreparation包中的sameShape。如果它不是cas,它会添加级别和列(并警告你)。

使用它:

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

答案 1 :(得分:0)

我提出了一个解决方法,我将一个与标签同名的列附加到我的新数据中,并用随机因子级别填充它。

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

然后就可以了。