라플라스 값 | 정확도 | 카파통계량 | 민감도 | 특이도 | 정밀도 | 재현율 | F1 score |
laplace = 0.001 | 0.695 | 0.2413 | 0.416667 | 0.814285 | 0.49019 | 0.416667 | 0.45045 |
laplace = 0.01 | 0.695 | 0.2413 | 0.41667 | 0.814285 | 0.49019 | 0.416667 | 0.45045 |
laplace = 10 | 0.7 | 0.2347 | 0.3833 | 0.83571 | 0.5 | 0.38333 | 0.4339 |
# ■ 독일 은행 채무 불이행 여부 나이브 베이즈 모델 코드
# 1. 데이터 불러오기
credit <- read.csv("c:\\data\\credit.csv", header = T, stringsAsFactors = T)
# 2. 데이터 관찰하기
head(credit)
str(credit)
ncol(credit)
# 3. 훈련과 테스트 분할하기
library(caret)
set.seed(1)
k <- createDataPartition( credit$default, p=0.8, list=F) # 훈련 데이터 80%
train_data <- credit[ k, ]
test_data <- credit[ -k, ]
# 4. 모델 훈련하기
library(e1071)
model <- naiveBayes( default ~ . , data=train_data, laplace=10 )
# 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.695
# ■ 카파통계량
# install.packages("vcd")
library(vcd)
table(actual_type,predict_type)
Kappa(table(actual_type, predict_type)) # 카파통계량 0.2413
#■ 민감도
#install.packages("caret")
library(caret)
sensitivity(predict_type, actual_type, positive=positive_value) # 민감도 0.4166667
#■ 특이도
specificity(predict_type, actual_type, negative=negative_value) # 특이도 0.8142857
#■ 정밀도
posPredValue(predict_type, actual_type, positive=positive_value) # 정밀도 0.4901961
#■ 재현율
sensitivity( predict_type, actual_type, positive=positive_value) # 재현율 0.4166667
#■ F1 score 구하기
# install.packages("MLmetrics")
library(MLmetrics)
F1_Score( actual_type, predict_type, positive = positive_value) # F1 score 0.4504505