#1. 데이터 불러오기
cash <- read.csv("c:\\data\\credit.csv", stringsAsFactors=TRUE)
#2. 데이터 관찰하기
dim(cash)
str(cash)
#3. 훈련과 테스트 분할하기
library(caret)
set.seed(1)
k <- createDataPartition( cash$default, p=0.8, list=F) # 훈련 데이터 80%
train_data <- cash[ k, ] #800
test_data <- cash[ -k, ] #200
nrow(train_data)
nrow(test_data)
head(test_data)
#4. 모델 훈련하기
library(e1071)
model <- naiveBayes( default ~ . , data=train_data, laplace=0.0001 )
#5. 테스트 데이터 예측하기
result <- predict( model, test_data[ , -17] ) # 정답 빼고 넣어줍니다.
#6. 모델 평가하기
library(gmodels)
sum(result == test_data[ , 17] ) / length( test_data[ , 17 ]) * 100 #[1] 69.5
CrossTable(x=result, y=test_data[ , 17], chisq=TRUE )
#■다른 성능 척도 구하기
actual_default <- test_data[ , 17] #테스트 데이터의 실제값
predict_default <- result #테스트 데이터의 예측값
positive_value <- 'yes' # 관심범주(yes)
negative_value <- 'no' # 관심범주(no)
#■ 정확도
library(gmodels)
g <- CrossTable( actual_default, predict_default )
x <- sum(g$prop.tbl *diag(2)) #정확도 확인하는 코드
x
#[1] 0.695
#■ 카파통계량
install.packages("vcd")
library(vcd)
table(actual_default,predict_default)
Kappa(table(actual_default, predict_default))
: 0.2413
#■ 민감도
#install.packages("caret")
library(caret)
sensitivity(predict_default, actual_default, positive=positive_value)
:[1] 0.4166667
#■ 특이도
specificity(predict_default, actual_default, negative=negative_value)
: [1] 0.8142857
#■ 정밀도
posPredValue(predict_default, actual_default, positive=positive_value)
: [1] 0.4901961
#■ 재현율
sensitivity( predict_default, actual_default, positive=positive_value)
: [1] 0.4166667
#■ F1 score 구하기
library(MLmetrics)
F1_Score( actual_default, predict_default, positive = positive_value)
: [1] 0.4504505
표로 만들기
라플라스 | 정확도 | 카파 | 민감도 |
laplace=0.0001 | [1] 0.695 | 0.2413 | [1] 0.4166667 |
라플라스 | 특이도 | 정밀도 | 재현율 | F1 score |
laplace=0.0001 | [1] 0.8142857 | [1] 0.4901961 | [1] 0.4166667 | [1] 0.4504505 |