2

我正在尝试使用 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)

我本来希望预测值是0or 1,因为我的响应变量z也包含二分值 - 要么0-1并且我正在使用distribution="bernoulli".

我应该如何进行预测以获得测试数据集的真实分类?我应该简单地将pred.boost值四舍五入还是该函数有什么问题predict

4

2 回答 2

1

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

如果 type="response" 然后 gbm 转换回与结果相同的比例。目前,这将产生的唯一影响是返回伯努利的概率。

所以你应该在使用type="response"哪个是正确的时候得到概率。Plusdistribution="bernoulli"只是告诉标签遵循伯努利 (0/1) 模式。您可以省略它,但模型仍然可以正常运行。

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

于 2017-03-03T09:44:53.393 回答
0

尝试使用 adabag。adabag 中内置了类、概率、投票和错误,这使得它易于解释,当然代码行数也更少。

于 2017-09-14T20:46:35.760 回答