now is better than never
9. 모델 성능 개선 본문
홀드아웃 (Hold Out)
- 홀드아웃 : 훈련 데이터와 테스트 데이터로 분할하는 것
- k-홀드 교차검정 (k-hold) : 훈련 데이터 일부를 검정 데이터로 사용하여 최적의 하이퍼 파라미터를 발견할 수 있도록 검정 데이터를 교차해서 검정하는 방법
= 훈련 데이터 / 검정 데이터 / 테스트 데이터 3개로 분할
- 훈련데이터 : 공부할 데이터 (기출)
- 검정 데이터 : 훈련 데이터의 일부를 검정 데이터로 사용 (모의고사)
- 테스트 데이터 : 시험 볼 데이터 (수능)
R 로 k-hold 교차 검증 구현
- 데이터 로드
- 전체 데이터의 일부를 테스트 데이터로 분리
- 훈련 데이터 전체에 대해서 10개의 교차검증을 위한 행번호 생성
- 하나의 폴드를 검정 데이터로 하고 나머지를 훈련 데이터로 생성
- 10개의 폴드를 교차검증해서 훈련 데이터에 대한 kappa 통계량을 출력
- 10개의 카파 통계량값의 평균값을 출력
credit <- read.csv("C:/Data/credit.csv", stringsAsFactors = T)
head(credit)
library(caret)
split <- createDataPartition(credit$default, p=0.9, list=F)
train <- credit[split, ]
test <- credit[-split, ]
nrow(train)
nrow(test)
folds <- createFolds(train$default, k=10)
str(folds) # 900 개 중에 랜덤으로 10 등분해서 90 개씩 접어놓음
train01 <- train[-folds$Fold01, ] # 훈련 데이터
test01 <- train[folds$Fold01, ] # 검정 데이터
nrow(train01)
nrow(test01)
install.packages("irr")
library(C50)
library(irr)
# 폴드 10 개 교차검증으로 카파통계량 출력
k_fold_func <- function(x){
credit_train <<- train[-x, ]
credit_test <<- train[x, ]
credit_model <<- C5.0(default ~., data=credit_train)
credit_pred <<- predict(credit_model, credit_test)
credit_actual <<- credit_test$default
kappa <<- kappa2(data.frame(credit_actual, credit_pred))$value
return (kappa)} # 예측값과 정답과의 일치
# 10 개의 카파통계량의 평균값 출력
# 카파통계량이 1에 가까울 수록 성능이 좋은 모델
folds <- createFolds(train$default, k=10)
cv_result <- lapply(folds, k_fold_func)
cv_result
mean(unlist(cv_result)) # trials=1 일 때 성능 낮음
k_fold_func2 <- function(x){
credit_train <<- train[-x, ]
credit_test <<- train[x, ]
credit_model <<- C5.0(default ~., data=credit_train, trials=100)
credit_pred <<- predict(credit_model, credit_test)
credit_actual <<- credit_test$default
kappa <<- kappa2(data.frame(credit_actual, credit_pred))$value
return (kappa)}
cv_result2 <- lapply(folds, k_fold_func2)
cv_result2
mean(unlist(cv_result2)) # 0.36
# test datat
credit_pred2 <- predict( credit_model, test ) # 모델예측
credit_actual2 <- test$default # 테스트 데이터의 정답 데이터 구성
kappa2 <- kappa2( data.frame( credit_actual2, credit_pred2) )$value
kappa2
- trials=100 : k-hold 교차검증
- + 최적의 하이퍼 파라미터를 찾는 기능 추가해야 함 <- caret 패키지
set.seed(300)
model <- train(default ~., data=credit, method="C5.0")
model
result <- predict(model, credit[, -17])
table(credit$default, result)
- train 함수 : 최적의 하이퍼 파라미터 찾아줌
Accuracy was used to select the optimal model using the largest value.
The final values used for the model were trials = 20, model = tree
and winnow = FALSE.
result
no yes
no 700 0
yes 2 298
본 내용은 아이티윌 '빅데이터&머신러닝 전문가 양성 과정' 을 수강하며 작성한 내용입니다.
'머신러닝 & 딥러닝' 카테고리의 다른 글
11. T 검정 (T Test), 기타 머신러닝 (1) | 2023.04.11 |
---|---|
10. 앙상블 (Ensemble) (0) | 2023.04.06 |
8. 머신러닝 평가 (0) | 2023.04.03 |
7. [비지도학습] 군집분석 (Clustering) (0) | 2023.04.03 |
6. [비지도학습] 연관규칙 (Association Rules) (0) | 2023.03.31 |