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

你可以帮帮我吗?

谢谢你。

4

2 回答 2

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
于 2018-02-13T11:14:52.937 回答
0

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

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

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

于 2018-04-02T07:21:04.013 回答