2016-08-09 4 views
1

80/20 훈련 및 테스트 세트에서 데이터 세트를 분할하려고합니다. 나는 각 레벨이 똑같이 샘플링되지 않았지만, 4 레벨을 가진 요인 인 위치별로 분리하려고합니다. 1892 개 샘플의 아웃 -비율이 다른 랜덤 층화 샘플링

있는 Location1 : 172
Location2를 : 615
LOCATION3 : 603
LOCATION4 : 나는 위에서 언급 한 바와 같이, 전체 데이터 세트 20 분의 80을 분할하려고하지만, 또한 내가하고 502

각 위치를 80/20으로 분할하여 교육 및 테스트 세트의 각 위치에서 균등 한 비율을 얻으십시오. splitstackshape 패키지의 stratified 기능을 사용하여 하나의 게시물을 보았지만 내 요인을 분리하고 싶지 않습니다.

x <- c(1, 2, 3, 4, 1, 3, 7, 4, 5, 7, 8, 9, 4, 6, 7, 9, 7, 1, 5, 6)
xx <- c("A", "A", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "D", "D", "D", "D", "D")
df <- data.frame(x, xx)
validIndex <- stratified(df, "xx", size=16/nrow(df))
valid <- df[-validIndex,]
train <- df[validIndex,]

A, B, C, 012,345,466 - 여기

단순화 재현 예제은 실제 데이터 세트와 대략적인 비율의 요소에 해당합니다 (각각 ~ 10, 32, 32 및 26 %)

+0

어쩌면 내가 부족 뭔가를하지만, 초기 데이터 세트가 무작위로 20 분의 80을 분할하는 경우 다음 각 위치가 20 분의 80을 분할 할 것으로 기대합니다. 단지 당신이 무작위로 그렇게하기 때문입니다. – AntoniosK

+0

'caret' 패키지에는 데이터 분할을위한 몇 가지 기능이 있습니다. http://topepo.github.io/caret/splitting.html –

+0

@AntoniosK 데이터 세트의 비율이 균일하지 않더라도? 나는 비율을 고려하지 않고 무작위로 80 %를 취할 것이라고 생각했습니다. 어쩌면 내가 잘못 생각한 것 같습니다. – Danib90

답변

1

bothSets을 사용하면 유효성 검사 및 교육에 원본 데이터 프레임의 분할을 포함하는 목록을 반환해야합니다 세트 (누구의 조합은 원래의 데이터 프레임이어야 함) :

splt <- stratified(df, "xx", size=16/nrow(df), replace=FALSE, bothSets=TRUE) 
valid <- splt[[1]] 
train <- splt[[2]] 

## check 
df2 <- as.data.frame(do.call("rbind",splt)) 
all.equal(df[with(df, order(xx, x)), ], 
      df2[with(df2, order(xx, x)), ], 
      check.names=FALSE) 
+0

위대한,이 일을 멋지게 - 감사합니다 – Danib90

관련 문제