Adabag助推功能出错

时间:2018-02-13 10:53:06

标签: r machine-learning boosting

  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包中的提升功能,但它告诉我矩阵(?)中的行数必须相等。这些数据不是原始数据,但它似乎会抛出相同的错误。

你能帮帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

您不应使用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

答案 1 :(得分:0)

Pablo,如果我们仔细查看您的样本数据,我们会注意到一个属性,使得分类算法无法处理。您的数据集由五个样本组成,每个样本都有一个唯一的标签,即因变量:a,b,c,d,e。数据集只有一个特征(即自变量var2,因为ID应从特征列表中排除),由两个类组成:0和1.这意味着有几个(因变量的)标签对应同一个类自变量。当算法尝试构建模型时,在此过程中由于先前描述的数据集属性而遇到定义回归的问题并抛出错误(矩阵的行数必须匹配(参见第2页)

相反,Marco的数据有一些健康的多样性:在六个样本的数据集中,只有三个标签(b,c,e)和两个类别(0,1)。数据集多样且可靠,足以使算法处理它。

因此,为了使用adabag的提升(使用名为rpart的回归树作为控件),您应该使您的数据更加多样化和可靠。祝好运!