伯努利vs Adaboost GBM?

时间:2015-11-17 17:34:16

标签: r classification gbm

我真的不明白实际分配方面的差异= 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

我不明白为什么bernoulli没有给出任何结果?我想我对这是如何工作的基本误解?

我正在寻找: 解释为什么bernoulli没有工作。我以为文档说这可以用于分类? 2.如果它们都可以用于分类,那么实际的差异是什么?

2 个答案:

答案 0 :(得分: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 ...

答案 1 :(得分: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个整数,它们都是零或一个。没事做。删除第4行@Neal Fultz在他的原始评论中推荐并在他的回答中解释。如果要将变量显式绑定到{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))