我正在尝试对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)
答案 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) ))
然后就可以了。