2017-03-03 9 views
1

Rのgbmパッケージを使用して分類ツリーを強化しようとしていますが、predict関数から得られる予測の種類について少し混乱しています。Rの分類クラスを強化する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)からの要素を持つベクトルである:

は、ここに私のコードです。

私の応答変数zも二分値で構成されていて、私は、0または1のいずれかであることが予測値を期待しているだろう - 0または1のいずれか - と私はdistribution="bernoulli"を使用しています。

私のテストデータセットの実際の分類を得るために私の予測をどのように進めるべきですか? pred.boostの値を単純に丸めるか、predictの機能に問題がありますか?

答えて

0

あなたの観察された動作は正しいです。ドキュメントから:

type = "response"の場合、gbmは の結果と同じ縮尺に変換します。現在のところ、これは唯一の効果はbernoulliの確率 を返すことです。

正しい場合は、type="response"を使用すると確率が上がるはずです。 Plus distribution="bernoulli"は、ラベルがbernoulli(0/1)パターンに従っていることを伝えるだけです。あなたはそれを省略することができ、まだモデルは正常に動作します。

predict_class <- pred.boost > 0.5(カットオフ= 0.5)を実行するか、カットオフを決定するためにROC曲線をプロットします。

0

アダバグを使用してください。クラス、確率、票およびエラーは、コードを簡単に解釈できるようにadabagに組み込まれています。

関連する問題