在 R 中使用 gbm 进行梯度提升,分布 =“bernoulli”
Posted
技术标签:
【中文标题】在 R 中使用 gbm 进行梯度提升,分布 =“bernoulli”【英文标题】:Gradient Boosting using gbm in R with distribution = "bernoulli" 【发布时间】:2014-06-25 03:50:49 【问题描述】:我在R
中使用gbm
包并应用'bernoulli' 选项进行分发以构建分类器,我得到'nan' 的异常结果,我无法预测任何分类结果。但是当我使用“adaboost”时,我没有遇到同样的错误。下面是示例代码,我用 iris 数据集复制了同样的错误。
## using the iris data for gbm
library(caret)
library(gbm)
data(iris)
Data <- iris[1:100,-5]
Label <- as.factor(c(rep(0,50), rep(1,50)))
# Split the data into training and testing
inTraining <- createDataPartition(Label, p=0.7, list=FALSE)
training <- Data[inTraining, ]
trainLab <- droplevels(Label[inTraining])
testing <- Data[-inTraining, ]
testLab <- droplevels(Label[-inTraining])
# Model
model_gbm <- gbm.fit(x=training, y= trainLab,
distribution = "bernoulli",
n.trees = 20, interaction.depth = 1,
n.minobsinnode = 10, shrinkage = 0.001,
bag.fraction = 0.5, keep.data = TRUE, verbose = TRUE)
## output on the console
Iter TrainDeviance ValidDeviance StepSize Improve
1 -nan -nan 0.0010 -nan
2 nan -nan 0.0010 nan
3 -nan -nan 0.0010 -nan
4 nan -nan 0.0010 nan
5 -nan -nan 0.0010 -nan
6 nan -nan 0.0010 nan
7 -nan -nan 0.0010 -nan
8 nan -nan 0.0010 nan
9 -nan -nan 0.0010 -nan
10 nan -nan 0.0010 nan
20 nan -nan 0.0010 nan
请让我知道是否有解决办法来解决这个问题。我使用它的原因是尝试加法逻辑回归,请建议 R 中是否有其他替代方法可以解决这个问题。
谢谢。
【问题讨论】:
【参考方案1】:train.fraction 应该是
谢谢!
【讨论】:
【参考方案2】:你使用gbm.fit()
而不是gbm()
有什么原因吗?
基于package documentation,gbm.fit()
中的y变量需要是一个向量。
我尝试确保矢量是强制使用的
trainLab <- as.vector(droplevels(Label[inTraining])) #vector of chars
这在控制台上给出了以下输出。不幸的是,我不确定为什么有效的偏差仍然是 -nan。
Iter TrainDeviance ValidDeviance StepSize Improve
1 1.3843 -nan 0.0010 0.0010
2 1.3823 -nan 0.0010 0.0010
3 1.3803 -nan 0.0010 0.0010
4 1.3783 -nan 0.0010 0.0010
5 1.3763 -nan 0.0010 0.0010
6 1.3744 -nan 0.0010 0.0010
7 1.3724 -nan 0.0010 0.0010
8 1.3704 -nan 0.0010 0.0010
9 1.3684 -nan 0.0010 0.0010
10 1.3665 -nan 0.0010 0.0010
20 1.3471 -nan 0.0010 0.0010
【讨论】:
如果 train.fraction 不是以上是关于在 R 中使用 gbm 进行梯度提升,分布 =“bernoulli”的主要内容,如果未能解决你的问题,请参考以下文章
R语言基于h2o包构建二分类模型:使用h2o.gbm构建梯度提升机模型GBM使用h2o.auc计算模型的AUC值