在R中提升分类树

时间:2017-03-03 05:59:43

标签: r classification boosting

我试图使用R中的gbm包来提升分类树,而我对从predict函数获得的预测类型有点困惑。

这是我的代码:

  #Load packages, set random seed
  library(gbm)
  set.seed(1)

  #Generate random data
  N<-1000
  x<-rnorm(N)
  y<-0.6^2*x+sqrt(1-0.6^2)*rnorm(N)
  z<-rep(0,N)
  for(i in 1:N){
    if(x[i]-y[i]+0.2*rnorm(1)>1.0){
      z[i]=1
    }
  }

  #Create data frame
  myData<-data.frame(x,y,z)

  #Split data set into train and test
  train<-sample(N,800,replace=FALSE)
  test<-(-train)

  #Boosting
  boost.myData<-gbm(z~.,data=myData[train,],distribution="bernoulli",n.trees=5000,interaction.depth=4)
  pred.boost<-predict(boost.myData,newdata=myData[test,],n.trees=5000,type="response")
  pred.boost

pred.boost是一个包含区间(0,1)中元素的向量。

我希望预测值可以是01,因为我的响应变量z也包含二分值 - 0或{{1我正在使用1

我应该如何进行预测才能获得测试数据集的真实分类?我应该简单地舍入distribution="bernoulli"值,还是我对pred.boost函数做错了?

2 个答案:

答案 0 :(得分:1)

您观察到的行为是正确的。来自文档:

  

如果type =&#34;响应&#34;然后gbm转换回与相同的比例   结果。目前唯一的影响就是返回   bernoulli的可能性。

因此,在使用正确的type="response"时,您应该获得概率。加distribution="bernoulli"只是告诉标签遵循bernoulli(0/1)模式。你可以省略它,但仍然可以运行模型。

继续执行predict_class <- pred.boost > 0.5(截止= 0.5)或绘制ROC曲线以自行决定截止值。

答案 1 :(得分:0)

尝试使用adabag。类,概率,投票和错误都在adabag中内置,这使得它易于解释,当然还有更少的代码行。