"R 데이터 분할"의 두 판 사이의 차이

67번째 줄: 67번째 줄:
* 단점: 특정 컬럼을 기준으로 균등 배분 미적용
* 단점: 특정 컬럼을 기준으로 균등 배분 미적용
<source lang='r' run>
<source lang='r' run>
idx = sample(1:nrow(iris), prob=c(0.8, 0.2))
flag = sample(2,nrow(iris), prob=c(0.8, 0.2))
Train = iris[ idx,]
Train = iris[flag==1,]
Test  = iris[-idx,]
Test  = iris[flag==2,]
nrow( Train )
nrow( Train )
nrow( Test  )
nrow( Test  )

2020년 5월 8일 (금) 02:21 판

1 개요

R 데이터 분할

2 createDataPartition() ★

library(caret,quietly=TRUE)
idx = createDataPartition(iris$Species,p=0.8,list=FALSE)
Train = iris[ idx,]
Test  = iris[-idx,]
nrow( Train )
nrow( Test  )

3 sample.split()

  • caTools 라이브러리 필요
library(caTools)
msk = sample.split(iris$Species, SplitRatio=0.8)
Train = iris[ msk,]
Test  = iris[!msk,]
nrow( Train )
nrow( Test  )
df = read.table( header=TRUE, stringsAsFactors=FALSE, text="
name  major gpa
Alice Math  3.3
Bob   Math  3.4
Carol Math  3.5
Dave  Math  3.6
Erin  Math  3.7
Frank Math  3.7
Grace Chem  3.6
Heidi Chem  3.6
Ivan  Chem  3.7
Judy  Chem  3.8
Kelly Chem  3.9
Lee   Chem  4.0
")
library(caTools)
msk = sample.split(df$major, SplitRatio=3/4)
train = df[ msk,]
test  = df[!msk,]
options(echo=T)
print( train )
print( test  )

4 seq()

  • 추가 라이브러리 필요 없음
  • 랜덤은 아니고 n번째 추출
  • 단점: ① 비율 미세조정이 어려울 수 있음, ② 균등한 비율 배분이 어려울 수 있음
  • 아래 예시는 4:1 ( 80%: 20% ), iris 자료는 Species 3종이 각 50개씩 차례로 있는 경우라서 균등 배분되었음
Train = iris[-c(seq(5,nrow(iris),5)),] # 매 5번째만 제외
Test  = iris[ c(seq(5,nrow(iris),5)),] # 매 5번째만 포함
nrow( Train ) # 120
nrow( Test  ) # 30

5 sample()

  • 추가 라이브러리 필요 없음
  • 비율 조정 용이
  • 단점: 특정 컬럼을 기준으로 균등 배분 미적용
flag = sample(2,nrow(iris), prob=c(0.8, 0.2))
Train = iris[flag==1,]
Test  = iris[flag==2,]
nrow( Train )
nrow( Test  )

6 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}