使用Rb中的gbm进行梯度提升,分布=“bernoulli”

时间:2014-05-07 23:26:19

标签: r classification logistic-regression adaboost gbm

我在gbm中使用R个套餐,并应用了#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中是否还有其他替代方法来解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:0)

您是否有理由使用gbm.fit()代替gbm()

根据package documentationgbm.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

答案 1 :(得分:0)

train.fraction应该<1才能获得ValidDeviance,因为我们正在创建验证数据集。

谢谢!