45. K겹 교차 검증(K-Fold Cross Validation)


r

Overview

테스트를 위한 데이터의 수가 충분하지 않는 경우 모든 데이터를 테스트 데이터 셋으로 만드는 방법이 있다.

K겹 교차 검증이란, 데이터 셋을 여러 개로 나누어 하나씩 테스트 데이터 셋으로 사용하고 나머지를 모두 학습용 데이터 셋으로 사용하는 방법이다.

이러한 단순한 방법을 단일 잔류(leave-one-out)라고 한다.

fig


cvTools 를 사용한 교차 검증

n개의 관찰치를 K겹 교차 검증의 R회 반복으로 분할한다.

  • 사용 형식
    • cross <- cvFolds(n=nrow(iris), K=3, R=2, type)
  • n
    • 관찰치의 수 또는 데이터의 크기
  • K
    • K겹에 대한 설정
  • R
    • R회 반복
  • type
    • type('random', 'consecutive', 'interleaved')

예제

# install.packages('cvTools')
library(cvTools)
library(party)

myframe <- data.frame(col=c(1:10))
# myframe

cross <- cvFolds(n=nrow(myframe), K=5, R=2)
# str(cross)
# cross

# names(cross)

# cross$which

# cross$subsets[cross$which == 4, 2]

# K fold cross validation data creation
# 의사 검정 트리
k_value <- 3
r_value <- 2
cross <- cvFolds(n=nrow(iris), K=k_value, R=r_value)
# cross

# str(cross)
# length(cross$which)

# dim(cross$subsets)
# table(cross$which)

# 데이터 프레임의 관측치 적용 하기
# For Loop
R <- 1:r_value
K <- 1:k_value
cnt <- 0 # 총 시행 횟수 = k_value * r_value
accuracy <- numeric() # 분류 정확도를 위한 벡터

for(r in R) {
    for(k in K) {
        idx <- cross$subsets[cross$which == k, r]
        training <- iris[-idx,]
        testing <- iris[idx,]

        myformula <- Species ~ .
        model <- ctree(formula=myformula, data=training)

        pred <- predict(model, testing)
        mytable <- table(pred, testing$Species)

        # print(mytable)
        # print('==================================================')

        cnt <- cnt + 1
        accuracy[cnt] <- (mytable[1,1] + mytable[2,2] + mytable[3,3]) / sum(mytable)
    }
}
cnt

accuracy
round(100 * mean(accuracy), 4)





© 2019. by RaP0d

Powered by aiden