首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R gbm logistic回归

R gbm logistic回归
EN

Stack Overflow用户
提问于 2011-12-07 13:32:57
回答 1查看 13K关注 0票数 8

我希望使用GBM包进行逻辑回归,但它给出的答案略高于0-1范围。我已经尝试了0-1预测的建议分布参数(bernoulliadaboost),但这实际上比使用gaussian更糟糕。

代码语言:javascript
复制
GBM_NTREES = 150
GBM_SHRINKAGE = 0.1
GBM_DEPTH = 4
GBM_MINOBS = 50
> GBM_model <- gbm.fit(
+ x = trainDescr 
+ ,y = trainClass 
+ ,distribution = "gaussian"
+ ,n.trees = GBM_NTREES
+ ,shrinkage = GBM_SHRINKAGE
+ ,interaction.depth = GBM_DEPTH
+ ,n.minobsinnode = GBM_MINOBS
+ ,verbose = TRUE)
Iter   TrainDeviance   ValidDeviance   StepSize   Improve
     1        0.0603             nan     0.1000    0.0019
     2        0.0588             nan     0.1000    0.0016
     3        0.0575             nan     0.1000    0.0013
     4        0.0563             nan     0.1000    0.0011
     5        0.0553             nan     0.1000    0.0010
     6        0.0546             nan     0.1000    0.0008
     7        0.0539             nan     0.1000    0.0007
     8        0.0533             nan     0.1000    0.0006
     9        0.0528             nan     0.1000    0.0005
    10        0.0524             nan     0.1000    0.0004
   100        0.0484             nan     0.1000    0.0000
   150        0.0481             nan     0.1000   -0.0000
> prediction <- predict.gbm(object = GBM_model
+ ,newdata = testDescr
+ ,GBM_NTREES)
> hist(prediction)
> range(prediction)
[1] -0.02945224  1.00706700

伯努利:

代码语言:javascript
复制
GBM_model <- gbm.fit(
x = trainDescr 
,y = trainClass 
,distribution = "bernoulli"
,n.trees = GBM_NTREES
,shrinkage = GBM_SHRINKAGE
,interaction.depth = GBM_DEPTH
,n.minobsinnode = GBM_MINOBS
,verbose = TRUE)
prediction <- predict.gbm(object = GBM_model
+ ,newdata = testDescr
+ ,GBM_NTREES)
> hist(prediction)
> range(prediction)
[1] -4.699324  3.043440

和adaboost:

代码语言:javascript
复制
GBM_model <- gbm.fit(
x = trainDescr 
,y = trainClass 
,distribution = "adaboost"
,n.trees = GBM_NTREES
,shrinkage = GBM_SHRINKAGE
,interaction.depth = GBM_DEPTH
,n.minobsinnode = GBM_MINOBS
,verbose = TRUE)
> prediction <- predict.gbm(object = GBM_model
+ ,newdata = testDescr
+ ,GBM_NTREES)
> hist(prediction)
> range(prediction)
[1] -3.0374228  0.9323279

如果我做错了什么,我是需要对数据进行缩放( preProcess )(缩放、居中),还是需要手动设置值的上限/上限,如下所示:

代码语言:javascript
复制
prediction <- ifelse(prediction < 0, 0, prediction)
prediction <- ifelse(prediction > 1, 1, prediction)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-07 15:50:40

来自?predict.gbm

返回一个预测向量。默认情况下,预测在f(x)的范围内。例如,对于伯努利损失,返回值是对数赔率等级,泊松损失是对数等级,coxph是对数危险等级。

如果type=为“response”,那么gbm将转换回与结果相同的级别。目前,这将产生的唯一影响是返回bernoulli的概率和poisson的预期计数。对于其他发行版,"response“和"link”返回相同的值。

因此,如果使用distribution="bernoulli",则需要将预测值转换为0,1:p <- plogis(predict.gbm(model))。使用distribution="gaussian"实际上是为了回归而不是分类,尽管我很惊讶预测不是0,1:我的理解是gbm仍然是基于树的,所以预测值应该不能超出训练数据中存在的值。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8410846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档