我似乎无法让 adabagbaggingpredict.bagging 工作。

predict.bagging 手册页中,有以下内容:

 library(adabag)
 library(rpart)
 data(iris)
 names(iris)<-c("LS","AS","LP","AP","Especies")
 sub <- c(sample(1:50, 25), sample(51:100, 25), sample(101:150, 25))
 iris.bagging <- bagging(Especies ~ ., data=iris[sub,], mfinal=10)
 iris.predbagging<- predict.bagging(iris.bagging, newdata=iris[-sub,])
 iris.predbagging

这很好,而且工作正常。但是,当我稍微更改 newdata 中的 predict.bagging 时,它​​停止工作。

主要是,我无法真正删除或更改 Especies 列,这很奇怪,因为那是我应该预测的!一个例子。
testdata <- iris[-sub, ]
result <- predict.bagging(iris.bagging, newdata=testdata)

....这工作正常,几乎是该示例的副本。但是,这会产生错误
testdata <- iris[-sub, -5] #this deletes the Especies column!
result <- predict.bagging(iris.bagging, newdata=testdata)

还有这个
testdata <- iris[-sub, ]
testdata$Especies <- c("virginica") #sets up everything as virginica
result <- predict.bagging(iris.bagging, newdata=testdata)

产生错误!

到底是怎么回事?我想使用 bagging 制作一个分类器,但我无法提前知道结果,这违背了这一点。

编辑:好吧,它甚至变得奇怪了。
> testdata <- iris[150,]
> predict.bagging(iris.bagging, newdata=testdata) #all working
> testdata
     LS AS  LP  AP  Especies
150 5.9  3 5.1 1.8 virginica
> is(testdata)
[1] "data.frame" "list"       "oldClass"   "vector"
> testdata$Especies = "virginica"
> testdata
     LS AS  LP  AP  Especies
150 5.9  3 5.1 1.8 virginica    #!!!the same thing!!!
> is(testdata)
[1] "data.frame" "list"       "oldClass"   "vector"    #the same object type!!!
>
> predict.bagging(iris.bagging, newdata = testdata)
Error in matrix(unlist(value, recursive = FALSE, use.names = FALSE), nrow = nr,  :
  length of 'dimnames' [2] not equal to array extent
In addition: Warning messages:
1: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
2: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
3: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
4: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
5: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
6: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
7: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
8: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
9: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
10: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'
>

最佳答案

哦,我明白了,一点点。

显然,在最后一个 Especies 列中, 是一个因子,而不是一个字符串向量。所以,为了改变它,我必须像这样分解它:
testdata$Especies <- factor(c("virginica"), levels=c("setosa", "versicolor", "virginica"))
如果我有一个没有最后一列的数据框,我无论如何都必须添加它,并且因子的级别必须与原始表的因子完全相同,实际内容无关紧要。

到目前为止,我不接受我的答案是最好的,因为有人可以更好地解释原因。

关于r - 在 R adabag 中设置装袋,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8983060/

10-12 16:34