Lab 5-1. Classification (naive bayesian / k-nearest neighbor) 강의 - 빅데이터 분석 기술

오늘의 실습 내용은 분류기(Classification)입니다. 

우선 분류 lable이 있는 데이터를 Training 과 Test로 구분합니다. 저희는 mlbench 패키지에 있는 Sonar 데이터를 이용합니다. 


data(Sonar,package="mlbench")
summary(Sonar);prop.table(table(Sonar$Class))

요약 정보를 보시면 60개의 feature와 1개의 class로 구성되어있음을 알 수 있습니다. 여기서 class가 저희의 답이 되는 것이지요.

이 데이터를 트레이닝 셋(training set)과 테스트 셋(test set)으로 구분합니다. 트레이닝 셋은 분류 모델을 학습하기 위한 데이터이며, 테스트 셋은 학습이 완료된 모델의 정확도를 평가하기 위해 사용하는 데이터입니다. 저희는 70%는 학습에 사용하고 30%는 정확도를 측정하는데 사용하겠습니다. 

set.seed(1)
ind<-sample(2,nrow(Sonar),replace=T,prob=c(0.7,0.3))

traindata<-Sonar[ind==1,]
testdata<-Sonar[ind==2,]

train.label<-traindata[,61];test.label<-testdata[,61]
train_data<-traindata[,-61];test_data<-testdata[,-61]

이제 두 가지 nnaive bayesian 모델과 k-nearest neighbor 모델을 만들어보겠습니다. 각 모델을 위해 e1071과 class라는 패키지를 설치하셔야 합니다. 
naive bayesian model
library(e1071)
naivemodel <- naiveBayes(Class ~ ., data=traindata)
naivemodel$apriori   # Prior Prob
naivemodel$tables    # Likelihood
  
# k nearest neighbor (k-NN) 
library(class)
m<-knn(train_data,test_data,cl=train.label,k=10)

k-nn방식은 모델을 생성하는 방법이 아니라 CBR (case based reasoning) 방식이기 때문에 데이터 만으로 테스트 데이터의 label을 예측합니다. 그래서 평가할때 따로 prediction하는 부분이 없습니다. 아래는 모델을 평가하는 내용입니다. 

# evaluation
pred <- predict(naivemodel, testdata[,-61])
table(pred, testdata$Class);x<-table(pred, testdata$Class)
sum(diag(x))/sum(x)

table(m,test.label);x<-table(m,test.label)
sum(diag(x))/sum(x)

여기까지 따라하셨다면 어느 모델이 더 우수한지 알 수 있겠죠? 지금은 단순하게 accuracy만을 측정하였지만, recall/precision/f-measure 등을 이용하면 모델을 더 정밀하게 평가할 수 있을 것입니다. 이것은 각자 고민해보세요~


덧글

댓글 입력 영역

와이드 애드센스