首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对新数据运行predict.boosting?

如何对新数据运行predict.boosting?
EN

Stack Overflow用户
提问于 2017-08-21 14:50:55
回答 2查看 577关注 0票数 1

我试图在adabag包中使用predict.boosting来处理新的数据。没有标签(或包中的任何其他函数),我找不到一种方法来使用它来处理数据。

我正在努力:

代码语言:javascript
复制
pr <- predict.boosting(modelfit, test[,2:ncol(test)])

它规定:

代码语言:javascript
复制
Error in `[.data.frame`(newdata, , as.character(object$formula[[2]])) : 
  undefined columns selected

但是,如果我包括标签:

代码语言:javascript
复制
pr <- predict.boosting(modelfit, test)

效果很好。但是必须有一种方法来使用它作为一个没有标签的数据的预测模型。

谢谢你的帮助!

从包中编辑示例:

代码语言:javascript
复制
library(rusboost)
library(rpart)
data(iris)

通过删除大部分的setosa观测结果,使其成为一个不平衡的数据集。

代码语言:javascript
复制
df <- iris[41:150,]

创建二进制变量

代码语言:javascript
复制
df$Setosa <- factor(ifelse(df$Species == "setosa", "setosa", "notsetosa"))

创建负示例索引

代码语言:javascript
复制
idx <- df$Setosa == "notsetosa"

运行模型

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-21 15:53:03

您应该控制train中的所有列(用来训练模型的集合)在test an中都有相同的名称。

请核对:

代码语言:javascript
复制
all(colnames(train) %in% colnames(test))

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

如果是真的,一般情况下,请提供一个可复制的例子。

编辑:

控制列相同且包含相同因素的一个很好的方法是使用来自dataPreparation包的dataPreparation。如果不是cas,它将添加级别和列(并警告您)。

使用它:

代码语言:javascript
复制
library(dataPreparation)
test <- sameShape(test, train)
票数 1
EN

Stack Overflow用户

发布于 2017-08-22 07:53:02

我想出了一个解决办法,我在我的新数据上附加了一个与标签同名的列,并用随机因子级别填充了它。

代码语言:javascript
复制
df$Setosa <- factor(sample( c("setosa",  "notsetosa"), nrow(df), replace=TRUE, prob=c(0.5, 0.5) ))

那它就能正常工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45800139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档