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

 
(사용자 2명의 중간 판 16개는 보이지 않습니다)
2번째 줄: 2번째 줄:
;R 데이터 분할
;R 데이터 분할


==createDataPartition() ==
==단순 랜덤 분할==
* 목표변수의 비율을 따지지 않고 전체를 랜덤하게 분할
===sample()===
* 추가 라이브러리 필요 없음
<syntaxhighlight lang='r' run>
df = iris
idx = sample(1:nrow(df),nrow(df)*0.8)
Train = df[ idx,]
Test  = df[-idx,]
nrow(Train)
nrow(Test )
</syntaxhighlight>
 
==동등 배분==
* 훈련데이터와 테스트테이터에 특정컬럼값(예: 목표변수)을 기준으로 동등한 비율로 랜덤 배분
===createDataPartition()===
{{참고|R createDataPartition()}}
{{참고|R createDataPartition()}}
<source lang='r' run>
<syntaxhighlight lang='r' run hideerr>
library(caret, quietly=TRUE)
df = iris
idx = createDataPartition(iris$Species, list=F, p=0.8)
library(caret)
Train = iris[ idx,]
idx = createDataPartition(df$Species, list=F, p=0.8)
Test  = iris[-idx,]
Train = df[ idx,]
Test  = df[-idx,]
nrow( Train )
nrow( Train )
nrow( Test  )
nrow( Test  )
</source>
</syntaxhighlight>


==sample.split()==
===sample.split()===
* caTools 라이브러리 필요
* caTools 라이브러리 필요


<source lang='r' run>
<syntaxhighlight lang='r' run>
library(caTools)
library(caTools)
msk = sample.split(iris$Species, SplitRatio=0.8)
msk = sample.split(iris$Species, SplitRatio=0.8)
23번째 줄: 39번째 줄:
nrow( Train )
nrow( Train )
nrow( Test  )
nrow( Test  )
</source>
</syntaxhighlight>
<source lang='r' run>
<syntaxhighlight lang='r' run>
df = read.table( header=TRUE, stringsAsFactors=FALSE, text="
df = read.table( header=TRUE, stringsAsFactors=FALSE, text="
name  major gpa
name  major gpa
47번째 줄: 63번째 줄:
print( train )
print( train )
print( test  )
print( test  )
</source>
</syntaxhighlight>


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


==같이 보기==
==같이 보기==

2021년 10월 14일 (목) 02:30 기준 최신판

1 개요[ | ]

R 데이터 분할

2 단순 랜덤 분할[ | ]

  • 목표변수의 비율을 따지지 않고 전체를 랜덤하게 분할

2.1 sample()[ | ]

  • 추가 라이브러리 필요 없음
df = iris
idx = sample(1:nrow(df),nrow(df)*0.8) 
Train = df[ idx,]
Test  = df[-idx,]
nrow(Train)
nrow(Test )

3 동등 배분[ | ]

  • 훈련데이터와 테스트테이터에 특정컬럼값(예: 목표변수)을 기준으로 동등한 비율로 랜덤 배분

3.1 createDataPartition()[ | ]

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

3.2 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  )

3.3 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

4 같이 보기[ | ]

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