2017-03-03 60 views
1

我試圖使用R中的gbm包提高分類樹,我對從predict函數獲得的預測類型有點困惑。在R中增強分類樹

這是我的代碼:

#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也由二元價值觀 - 無論是01 - 我使用distribution="bernoulli"

我該如何繼續我的預測以獲得我的測試數據集的真實分類?我應該簡單地圍繞pred.boost的值,還是有什麼我做錯了predict函數?

回答

0

您觀察到的行爲是正確的。來自文檔:

如果type =「response」,那麼gbm將轉換回與 結果相同的比例。目前唯一的效果是返回bernoulli的概率爲 。

所以,當使用type="response"這是正確的,你應該得到概率。加上distribution="bernoulli"只是告訴標籤遵循bernoulli(0/1)模式。你可以省略,仍然模型將運行良好。

要繼續執行predict_class <- pred.boost > 0.5(截止值= 0.5),或者繪製ROC曲線以決定自己的截止點。

0

嘗試使用adabag。在adabag中內置了類,概率,投票和錯誤,這使得解釋起來更容易,當然還有更少的代碼行。