0

我不太了解实际分配方面的区别= Adaboost 或bernoulli

   library(MASS)
   library(gbm)
   data=Boston
   data$chas = factor(data$chas)
   ada_model = gbm(chas~ . , data, distribution ='adaboost')
   bern_model = gbm(chas ~ . , data, distribution = 'bernoulli')
   ada_model
   bern_model

我不明白为什么伯努利没有给出任何结果?我想我对它的工作原理有一个根本的误解?

我正在寻找: 1. 解释为什么伯努利不起作用。我以为文档说这可以用于分类?2.如果两者都可以用于分类,有什么实际区别?

4

2 回答 2

0
> str(data$chas)
 int [1:506] 0 0 0 0 0 0 0 0 0 0 ...
> sum(data$chas==0) + sum(data$chas==1)
[1] 506

当前有 506 个整数,它们要么为零要么为一。没事做。正如@Neal Fultz 在他的原始评论中推荐并在他的回答中解释的那样,删除第 4 行。如果您想将变量显式绑定到 {0,1},您可以使用as.logical并且您的代码变为:

library(MASS)
library(gbm)
data=Boston
data$chas = as.logical(data$chas) # optionally cast as logical to force range into 0 or 1
ada_model = gbm(chas~ . , data, distribution ='adaboost')
bern_model = gbm(chas ~ . , data, distribution = 'bernoulli')
ada_model
bern_model

稍微阅读一下字里行间,我猜您真正的问题是您的生产数据集的值不是 {0,1}。将它们转换为逻辑将它们转换为TRUE(1),你就可以开始了。如果这不是您想要的,那么使用它来查找它们并逐个检查它们:

which((data$chas != 0) & (data$chas != 1))
于 2016-05-24T21:58:01.427 回答
0

伯努利正在为您打破,因为该factor调用将 0/1s 重新编码为 1/2s:

> str(factor(data$chas[350:400]))
Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 2 2 2 ...
于 2015-11-18T00:10:20.257 回答