df1 <- data.frame(ID = c(1, 2, 3, 4, 5),
var1 = c('a', 'b', 'c', 'd', 'e'),
var2 = c(1, 1, 0, 0, 1))
ada = boosting(formula=var1~., data=df1)
Error in cbind(yval2, yprob, nodeprob) :
el número de filas de las matrices debe coincidir (vea arg 2)大家好,我正在尝试使用adabag包中的boosting函数,但它告诉我矩阵中的行数(?)必须相等。此数据不是原始数据,但它似乎抛出了相同的错误。
你能帮我一下吗?
谢谢。
发布于 2018-02-13 19:14:53
您不应该使用ID作为解释变量。
不幸的是,您的df1数据集太小,不可能理解ID是否是问题的根源。
下面我生成一个更大的数据集:
library(adabag)
set.seed(1)
n <- 100
df1 <- data.frame(ID = 1:n,
var1 = sample(letters[1:5], n, replace=T),
var2 = sample(c(0,1), n, replace=T))
head(df1)
# ID var1 var2
#
# 1 1 b 1
# 2 2 b 0
# 3 3 c 0
# 4 4 e 1
# 5 5 b 1
# 6 6 e 0
ada <- boosting(var1~var2, data=df1)
ada.pred <- predict.boosting(ada, newdata=df1)
ada.pred$confusion
# Observed Class Predicted Class a b c d e
# b 5 20 2 7 11
# c 2 2 10 2 2
# d 6 3 7 17 4发布于 2018-04-02 15:21:04
Pablo,如果我们仔细观察你的样本数据,我们会注意到一个属性,使分类算法无法处理。您的数据集由五个样本组成,每个样本都有一个唯一的标签,即因变量: a,b,c,d,e。数据集只有一个特征(即自变量var2,因为ID应从特征列表中排除),由两个类别组成:0和1。这意味着有几个标签(因变量)对应于自变量的同一类别。当算法试图建立一个模型时,在这个过程中,由于前面描述的数据集属性,它遇到了定义回归的问题,并抛出错误(矩阵的行数必须匹配(请参阅arg 2))。
相反,Marco的数据具有一些健康的多样性:在六个样本的数据集中,只有三个标签(b,c,e)和两个类别(0,1)。数据集是多样化和足够可靠的,算法可以处理它。
因此,为了使用adabag的boosting (使用名为rpart的回归树作为控件),您应该使您的数据更加多样化和可靠。祝好运!
https://stackoverflow.com/questions/48765091
复制相似问题