R :

2017-03-03 14 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)의 요소와 벡터이다 :

여기 내 코드입니다. 0 또는 1 중 하나를 - -

내 응답이 변수 z 또한 이분법 값으로 구성으로 나는, 예측 값이 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를 사용해보십시오. 클래스, 확률, 득표 및 오류는 쉽게 해석 할 수있는 adabag에 내장되어 있으며 물론 코드 줄이 적습니다.