2014-10-15 5 views
2

파티 라이브러리의 cforest 기능을 사용하여 기능의 중요성을 측정하고 싶습니다.cforest party unbalanced classes

내 출력 변수는 클래스 0 2000 개 샘플 및 I 인해 클래스 불균형에 편견을 피할 수있는 좋은 방법은 이러한 표본을 사용하여 숲의 각 트리를 양성하는 것입니다 생각

1. 클래스 100 개 샘플 같은 것을 가지고 클래스 1의 요소의 수는 클래스 0의 요소의 수와 같습니다.

어쨌든 이것을 할 수 있습니까? 나는 n_samples = c(20, 20)

편집과 같은 옵션으로 생각하고있다 : 코드의 예를

> iris.cf <- cforest(Species ~ ., data = iris, 
    +     control = cforest_unbiased(mtry = 2)) #<--- Here I would like to train the forest using a balanced subsample of the data 

> varimp(object = iris.cf) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width 
    0.048981818 0.002254545 0.305818182 0.271163636 
    > 

편집 : 어쩌면 내 질문에 충분히 명확하지 않습니다. 임의의 포리스트는 의사 결정 트리 집합입니다. 일반적으로 결정 트리는 데이터의 무작위 하위 샘플만을 사용하여 구성됩니다. 나는 사용 된 표본은 클래스 1과 클래스의 요소의 같은 번호를 가지고 싶습니다 0

편집 : 내가 찾고 있어요 함수는 랜덤 포레스트 패키지로 제공 확실하다

sampsize  
Size(s) of sample to draw. For classification, if sampsize is a vector of the length the number of strata, then sampling is stratified by strata, and the elements of sampsize indicate the numbers to be drawn from the strata. 

파티 패키지에 대해 동일한 항목이 필요합니다. 그것을 얻을 수있는 방법이 있습니까?

+0

이 옵션을 전달할 기능이 무엇입니까? 실제로 어떤 코드/기능을 실행하고 있습니까? – MrFlick

답변

0

나는 당신이 원하는 것을 알고 있다고 생각할 것입니다. 그러나 그것을하기에 충분한 R을 모르겠습니다.

함수가 데이터의 균형을 매개 변수로 제공하는지는 확실하지 않지만 수동으로 설정할 수는 있습니다. 아래는 신속하게 함께 던진 코드입니다. 보다 우아한 해결책이 존재할 수 있습니다.

# just in case 
myData <- iris 
# replicate everything *10* times. Replicate is just a "loop 10 times". 
replicate(10, 
    { 
     # split dataset by class and add separate classes to list 
     splitList <- split(myData, myData$Species) 
     # sample *20* random rows from each matrix in a list 
     sampledList <- lapply(splitList, function(dat) { dat[sample(20),] }) 
     # combine sampled rows to a data.frame 
     sampledData <- do.call(rbind, sampledList) 

     # your code below 
     res.cf <- cforest(Species ~ ., data = sampledData, 
          control = cforest_unbiased(mtry = 2) 
         ) 
     varimp(object = res.cf) 
    } 
) 

희망은 여기에서 받아 볼 수 있습니다.