2014-11-30 2 views
0

내 데이터 (todo5)는 1의 16 % 만있는 바이너리 클래스를가집니다. 테스트 세트를 불균형으로 유지하면서 모델을 훈련 할 균형 세트를 만들려고합니다. 우선 테스트에 대한 인덱스를 만들 :r- 샘플 불평형 명확한 코드

test.idx<-sample((1:nrow(todo5)),nrow(todo5)*.4) 

다음 내가 만들어가 (15K)를 거의 기록을 가지고 있기 때문에, 나는 작동하는 코드를 작성하지만 여전히 나는 분명 그것을 발견 된 1 을 풀은`t 균형 잡힌 훈련 세트. 나는 test.idx의 모든 일하지 남아 :

down.sample<-c(down.sample, sample((1:nrow(todo5))[todo5$flag_compro==0][-test.idx], length(down.sample))) 

이 할 수있는 더 좋은 (명확한) 방법이 있나요 :

down.sample<-c((1:nrow(todo5))[todo5$flag_compro==1][-test.idx]) 

내가 공의 같은 양을 추가?

답변

1

이 접근 방법이 더 명확합니까?

todo5 <- data.frame(x=sample(0:1, size=15e3, replace=TRUE, prob=c(0.84, 0.16)), y=runif(15e3)) 
trues <- seq(nrow(todo5))[todo5$x == 1] 
falses <- seq(nrow(todo5))[todo5$x != 1] 
falses <- sample(falses, size=length(trues)) 
both <- sort(c(trues, falses)) 
todo5subset <- todo5[both, ] 
summary(todo5) 
summary(todo5subset) 

나는 이것을 균형이라고 부르지 않을 것이다. 나는 다른 공변량과 함께 균형을 이루기 위해 Mahalanobis distance 나 matching을 사용할 것입니다. 논리적 벡터의

+0

감사합니다, 당신이 당신의 제안을 좀 더 설명 할 수 있을까? 또는 링크를 남기시겠습니까? – GabyLP

+0

@GabyP -이 신문은 모든 것을 설명해야한다고 생각합니다. http://www.jstatsoft.org/v42/i07/paper ...하지만 더 많은 것을 말하면 문제의 경제성을 알아야한다고 생각합니다. –

0

건설은 비교적 분명하다

down.sampleTF <- todo5$flag_compro %in% c(0,1) | rownames(todo) %in% test.idx 
    samp.todo <- todo[ down.sampleTF , ]