#1. 데이터 불러오기 credit <- read.csv("c:\\data\\credit.csv", stringsAsFactors = TRUE) head(credit) str(credit) #2. 데이터 관찰하기 head(credit) str(credit)
#3. 훈련과 테스트 분할하기 library(caret) set.seed(123)
k <- createDataPartition( credit$default, p=0.8, list=F) # 훈련 데이터 80% train_data <- credit[ k, ] test_data <- credit[ -k, ]
#4. 모델 훈련하기 library(e1071) set.set(7) model <- naiveBayes( default ~ . , data=train_data, laplace=0.35)
#5. 테스트 데이터 예측하기 result <- predict( model, test_data[ , -17] ) # 정답 빼고 넣어줍니다.
#6. 모델 평가하기 library(gmodels) sum(result == test_data[ , 17] ) / length( test_data[ , 17 ]) * 100 CrossTable(x=result, y=test_data[ , 17], chisq=TRUE )
# ■ 다른 성능 척도 구하기 actual_type <- test_data[, 17] #테스트 데이터의 실제값 predict_type <- result #테스트 데이터의 예측값 positive_value <- 'yes' # 관심범주(yes) negative_value <- 'no'# 관심범주(no)
# ■ 정확도 library(gmodels) g <-CrossTable( actual_type, predict_type ) x <- sum(g$prop.tbl *diag(2)) #정확도 확인하는 코드 x # 0.9950739
# ■ 카파통계량 # install.packages("vcd") library(vcd) table(actual_type,predict_type) Kappa(table(actual_type, predict_type)) # 0.9901
# ■ 민감도 #install.packages("caret") library(caret) sensitivity(predict_type, actual_type, positive=positive_value) # 0.9923372
# ■ 특이도 specificity(predict_type, actual_type, negative=negative_value) # 0.9976219
# ■ 정밀도 posPredValue(predict_type, actual_type, positive=positive_value) # 0.9974326
# ■ 재현율 sensitivity( predict_type, actual_type, positive=positive_value) # 0.9923372
# ■ F1 score 구하기 # install.packages("MLmetrics") library(MLmetrics) F1_Score( actual_type, predict_type, positive = positive_value) # 0.9948784
set.seed(1)
train_num <- createDataPartition(credit$default, p=0.8, list=F)
train_data2 <- credit[ train_num, ] test_data2 <- credit[ -train_num, ]
nrow(train_data2) # 900 nrow(test_data2) # 100
ncol(train_data2) # 17 head(train_data2) # 종속변수가 17번째 컬럼이다.
# 4. 모델 생성 library(C50)
credit_model <- C5.0( train_data2[ ,-17], train_data2[ ,17])
# 5. 모델 확인 summary(credit_model)
# 6. 모델 예측 train_result <- predict( credit_model, train_data2[ ,-17]) test_result <- predict( credit_model, test_data2[ , -17])
# 7. 모델 평가 # 훈련 정확도 sum(train_result==train_data2[ , 17]) / 800 * 100 # 83.88889
# 테스트 정확도 sum(test_result == test_data2[ , 17]) / 200 *100 # 67
actual_type <- test_data2[, 17] #테스트 데이터의 실제값 predict_type <- test_result #테스트 데이터의 예측값 positive_value <- 'yes' # 관심범주(yes) negative_value <- 'no'# 관심범주(no)
# ■ 정확도 library(gmodels) g <-CrossTable( actual_type, predict_type ) x <- sum(g$prop.tbl *diag(2)) #정확도 확인하는 코드 x # 0.9950739
# ■ 카파통계량 # install.packages("vcd") library(vcd) table(actual_type,predict_type) Kappa(table(actual_type, predict_type)) # 0.9901
# ■ 민감도 #install.packages("caret") library(caret) sensitivity(predict_type, actual_type, positive=positive_value) # 0.9923372
# ■ 특이도 specificity(predict_type, actual_type, negative=negative_value) # 0.9976219
# ■ 정밀도 posPredValue(predict_type, actual_type, positive=positive_value) # 0.9974326
# ■ 재현율 sensitivity( predict_type, actual_type, positive=positive_value) # 0.9923372
# ■ F1 score 구하기 # install.packages("MLmetrics") library(MLmetrics) F1_Score( actual_type, predict_type, positive = positive_value) |