分类伯努利分布中的GBM错误

Posted

技术标签:

【中文标题】分类伯努利分布中的GBM错误【英文标题】:GBM error in classification bernoulli distribution 【发布时间】:2020-08-09 02:05:32 【问题描述】:

针对分类问题运行 gbm 函数时。我收到以下错误:

res[flag, ]

我想知道为什么会出现这个错误以及如何解决它。

我的数据大约有 77 个数值变量(整数)用于分类和 1 个分组因子。数据中没有其他变量。数据中没有缺失数据。分组因子根据需要编码为因子(0,1)。

我的数据结构如下所示:

$Group : Factor w/ 2 levels "0", "1"
$it1 : int
...
$it70 : int

我的模型如下所示:

mod_gbm <- gbm(Group~. distribution = "bernoulli", data=df,
               n.trees=1000,shrinkage=.01, n.minobsinnode=5, 
               interaction.depth = 6, cv.folds=5) 

我意识到这个问题与这里的问题非常相似: Problems in using GBM function to do classification in R 但那个人想知道使用数字变量,唯一的反应是删除 cv.folds。我想将 cv.folds 保留在我的模型中并让它运行。

【问题讨论】:

需要尝试找出问题出在您的数据集还是 gbm 包上。分类是否适用于单个决策树?你能尝试一个不同的包,它有一个增强的实现吗?模型训练有没有报错? 我无法运行带有 1 棵树的模型,但我可以运行 gbm3 包而没有错误。 【参考方案1】:

如果您查看 gbm 的小插图:

distribution: Either a character string specifying the name of the
          distribution to use or a list with a component ‘name’
          specifying the distribution and any additional parameters
          needed. If not specified, ‘gbm’ will try to guess: if the
          response has only 2 unique values, bernoulli is assumed;
          otherwise, if the response is a factor, multinomial is
          assumed

如果您只有两个类,则无需将其转换为因子。我们可以使用 iris 示例来探索这一点,我在其中创建了一个组标签 0/1 :

library(gbm)
df = iris
df$Group = factor(as.numeric(df$Species=="versicolor"))
df$Species = NULL
 
mod_gbm <- gbm(Group~.,distribution ="bernoulli", data=df,cv.folds=5)
Error in res[flag, ] <- predictions : replacement has length zero

我得到同样的错误。所以我们将其转换为数字 0/1,您可以看到它正常工作。

当变量是因子时,as.numeric() 会将其转换为 1,2,其中 1 对应于第一级。所以在这种情况下,由于 Group 是 0/1 开始的:

df$Group = as.numeric(df$Group)-1
mod_gbm <- gbm(Group~.,distribution ="bernoulli", data=df,cv.folds=5)

我们得到了预测:

pred = ifelse(predict(mod_gbm,type="response")>0.5,1,0)
table(pred,df$Group)

    
pred  0  1
   0 98  3
   1  2 47

【讨论】:

以上是关于分类伯努利分布中的GBM错误的主要内容,如果未能解决你的问题,请参考以下文章

各种分布(转)

Python 模拟伯努利试验和二项分布

分类器

朴素贝叶斯算法之鸢尾花特征分类机器学习伯努利分布,多项式分布,高斯分布

NLTK 和 scikit-learn 中的伯努利朴素贝叶斯结果不同

用于朴素贝叶斯分类器的伯努利模型的拉普拉斯平滑