2013-05-13 1 views
0

Torgo의 "Data Mining with Data Mining"장의 코드를 수정하여 AdaBoost 및 그래디언트 부스팅 (각각 ada 및 gbm 패키지)을 사용하여 R로 정밀도/응답 곡선 집합을 생성하려고합니다. 아르 자형". 샘플 코드는 http://www.dcc.fc.up.pt/~ltorgo/DataMiningWithR/code4.html입니다.부스트 방법을 사용하여 PR 곡선 생성

Torgo는 AdaBoost를 구현하지만 패키지는 다릅니다 (패키지 ada를 사용하려고합니다). 그러나 하나의 오류 또는 다른 오류를 반환하지 않고 메서드를 바꿀 수 없었습니다. 누군가가 어떤 통찰력을 가지고 있다면, 그것은 인정 될 것입니다.

감사

GH

편집 :

데이터는 내가 여러 감독 학습을 구축하기 위해 노력하고있어있는 판매 데이터의 집합입니다 :

여기

내가 시도하고있는 무슨이다 모델. 응답 변수는 unkn, ok 및 fraud의 세 가지 값을 갖는 "Insp"입니다. 모든 unkn 항목은 앞으로 이동하기 전에 데이터 세트에서 제거됩니다. 그것은 다음과 같습니다

 ID Prod Quant Val Insp Uprice 
1   v1 p1 182 1665 unkn 9.148352 
2   v2 p1 3072 8780 unkn 2.858073 
3   v3 p1 20393 76990 unkn 3.775315 
4   v4 p1 112 1100 unkn 9.821429 
5   v3 p1 6164 20260 unkn 3.286827 
6   v5 p2 104 1155 unkn 11.105769 
7   v6 p2 350 5680 unkn 16.228571 
411816 v5896 p4127 143 1835 unkn 12.832168 
411817 v1796 p4127 102 1445 unkn 14.166667 
411818 v2540 p4127 106 1275 unkn 12.028302 

코드 교차 검증하기 위해 보류 아웃 루틴을 구현하는 두 가지 작업을 감독 학습 예제, 나이브 베이 즈 및 AdaBoostM1을 제공합니다. 최종 출력은 PR 곡선입니다. 다음과 같이 이들의 코드는 다음과 같습니다

nb <- function(train,test) { 
    require(e1071,quietly=T) 
    sup <- which(train$Insp != 'unkn') 
    data <- train[sup,c('ID','Prod','Uprice','Insp')] 
    data$Insp <- factor(data$Insp,levels=c('ok','fraud')) 
    model <- naiveBayes(Insp ~ .,data) 
    preds <- predict(model,test[,c('ID','Prod','Uprice','Insp')],type='raw') 
    return(list(rankOrder=order(preds[,'fraud'],decreasing=T), 
      rankScore=preds[,'fraud']) 
     ) 
} 


ho.nb <- function(form, train, test, ...) { 
    res <- nb(train,test) 
    structure(evalOutlierRanking(test,res$rankOrder,...), 
      itInfo=list(preds=res$rankScore, 
         trues=ifelse(test$Insp=='fraud',1,0) 
         ) 
      ) 
} 


nb.res <- holdOut(learner('ho.nb', 
          pars=list(Threshold=0.1, 
            statsProds=globalStats)), 
        dataset(Insp ~ .,sales), 
        hldSettings(3,0.3,1234,T), 
        itsInfo=TRUE) 

summary(nb.res) 

AdaBoostM1 :

나는 다음에 무엇을 시도하고 있습니다 (패키지 GBM)를 밀어 그라데이션을 사용하는 것을 제외하고는, 방법이 동일한 유형의 실행 무엇
ab <- function(train,test) { 
     require(RWeka,quietly=T) 
     sup <- which(train$Insp != 'unkn') 
     data <- train[sup,c('ID','Prod','Uprice','Insp')] 
     data$Insp <- factor(data$Insp,levels=c('ok','fraud')) 
     model <- AdaBoostM1(Insp ~ .,data, 
        control=Weka_control(I=100)) 
     preds <- predict(model,test[,c('ID','Prod','Uprice','Insp')], 
       type='probability') 
     return(list(rankOrder=order(preds[,'fraud'],decreasing=T), 
       rankScore=preds[,'fraud']) 
    ) 
} 


    ho.ab <- function(form, train, test, ...) { 
     res <- ab(train,test) 
     structure(evalOutlierRanking(test,res$rankOrder,...), 
      itInfo=list(preds=res$rankScore, 
         trues=ifelse(test$Insp=='fraud',1,0) 
        ) 
     ) 
} 


ab.res <- holdOut(learner('ho.ab', 
         pars=list(Threshold=0.1, 
           statsProds=globalStats)), 
       dataset(Insp ~ .,sales), 
       hldSettings(3,0.3,1234,T), 
       itsInfo=TRUE 
      ) 


summary(ab.res) 

. 필자는 모델 커맨드와 예측 자 벡터에 필요한 변경 사항 (필자가 기대할 수있는)을 만들지 만, 내 데이터 세트를 읽지는 않는다는 오류가 발생합니다.

gb <- function(train, test) { 
    require(gbm, quietly=T) 
    sup <- which(train$Insp != 'unkn') 
    data <- train[sup ,c('ID','Prod','Uprice','Insp')] 
    data$Insp <- factor(data$Insp,levels=c('ok','fraud')) 
    model <- gbm(Insp ~ .,data, n.trees = 100, shrinkage = 1) 
    preds <- predict(model,test[,c('ID','Prod','Uprice','Insp')], n.trees = 100, type =    "response") 
    return(list(rankOrder=order(preds[,'fraud'],decreasing=T), 
      rankScore=preds[,'fraud']) 
    ) 
    } 


ho.gb <- function(form, train, test, ...) { 
    res <- gb(train,test) 
    structure(evalOutlierRanking(test,res$rankOrder,...), 
      itInfo=list(preds=res$rankScore, 
         trues=ifelse(test$Insp=='fraud',1,0) 
      ) 
    ) 
    } 


gb.res <- holdOut(learner('ho.gb', 
         pars=list(Threshold=0.1, 
           statsProds=globalStats)), 
       dataset(Insp~.,sales), 
       hldSettings(3,0.3,1234,T), 
       itsInfo=TRUE 
) 


summary(gb.res) 

그러나 R은 terms.formula (화학식 데이터 = 데이터)의 "오류라는 오류를 반환한다 : '.' 수식 및 데이터 '인수 "그래서 나는 데이터를 잡는 게 아닌 것 같아요 ...

어떤 도움을 주시면 감사하겠습니다. 감사!

+0

안녕하세요. 일반적으로 시도한 세부 사항, 발생한 특정 오류, 의도 한 결과가 어떤 모양인지 또는 어떤 모양인지와 같은 자세한 정보를 게시 할 수 있다면 일반적으로 도움이됩니다. –

+0

또한 샘플 데이터 또는 최소한 데이터가 어떻게 보이는지가 유용 할 것입니다. 'reproduce (yourDataFrame)'을 사용하여 copy + paste'able 출력을 생성 할 수 있습니다. https://raw.github.com/rsaporta/pubR/gitbranch/reproduce.R –

+0

안녕하세요! 미안해, 나는 너무 많이 내 게시물을 어수선하게하고 싶지 않았지만, 너무 적게도 도움이되지 않는다는 것을 깨달았다. 나는 위에서 편집했다. – GHH

답변

0

요인 변수 Insp의 개별 특성과 관련된 구문 분석 오류가 발생했을 수 있습니다. 이 질문에 봐, 그리고 제안 된 수정은 또한 당신의 GBM 실험을 위해 작동하는지 확인 : 관련 data error in BMA package's bic.glm but not glm

: 당신은 당신이 사용중인 기본 R 및 패키지의 버전을 명확히 수 있을까?

관련 문제