Naive Bayes 분류 알고리즘

조건부 확률 적용 예측 / 비교적 성능 우수 / 베이즈 이론 적용

# 조건부 확률 : 사건 A가 발생한 상태에서 사건 B가 발생할 확률 
# P(B|A) = P(A|B) * P(B) / P(A)

Naive Bayes 실습(iris)

  • Naive Bayes 모델을 활용하기 위한 ’e1071’패키지 설치
# install.packages(e1071)
library(e1071)
## Warning: package 'e1071' was built under R version 3.3.3

1. train과 test 데이터 셋 생성

data(iris)  ## iris 호출
set.seed(415) # random 결과를 동일하게 지정
idx <- sample(1:nrow(iris), 0.7*nrow(iris)) # 7:3 비율로 idx 랜덤 추출 
train <- iris[idx, ]
test <- iris[-idx, ]
dim(train)
## [1] 105   5

2. 분류모델 생성 : train data 이용

iris의 Sepal.Length | Sepal.Width | Petal.Length | Petal.Width 변수를 기준으로 Species를 구분한다.

# 형식1) naiveBayes(train$x변수, train$y변수)
# 형식2) y~x  ==> naiveBayes(Species ~ ., data=train)   
model <- naiveBayes(train[-5], train$Species) 
model # 105개 학습 데이터를 이용하여 x변수(4개)를 y변수로 학습시킴 
## 
## Naive Bayes Classifier for Discrete Predictors
## 
## Call:
## naiveBayes.default(x = train[-5], y = train$Species)
## 
## A-priori probabilities:
## train$Species
##     setosa versicolor  virginica 
##  0.3428571  0.3142857  0.3428571 
## 
## Conditional probabilities:
##              Sepal.Length
## train$Species     [,1]      [,2]
##    setosa     4.958333 0.3375331
##    versicolor 5.942424 0.5196335
##    virginica  6.602778 0.6407523
## 
##              Sepal.Width
## train$Species     [,1]      [,2]
##    setosa     3.388889 0.3701566
##    versicolor 2.800000 0.3391165
##    virginica  2.961111 0.3245021
## 
##              Petal.Length
## train$Species     [,1]      [,2]
##    setosa     1.450000 0.1780851
##    versicolor 4.218182 0.4530829
##    virginica  5.544444 0.5577734
## 
##              Petal.Width
## train$Species      [,1]      [,2]
##    setosa     0.2472222 0.1108051
##    versicolor 1.3212121 0.1980492
##    virginica  2.0111111 0.2583218

3. 분류모델 평가 : test data 이용

# 형식) predict(model, test, type='class')  
p <- predict(model, test, type='class') 
# type='class' : y변수의 범주의 값으로 분류를 해준다.
# type='class'를 지정안하면 비율로 값을 반환한다. 
p   
##  [1] setosa     setosa     setosa     setosa     setosa     setosa    
##  [7] setosa     setosa     setosa     setosa     setosa     setosa    
## [13] setosa     setosa     versicolor versicolor versicolor versicolor
## [19] versicolor versicolor versicolor versicolor virginica  versicolor
## [25] virginica  versicolor versicolor versicolor versicolor versicolor
## [31] versicolor virginica  virginica  virginica  versicolor virginica 
## [37] virginica  virginica  virginica  virginica  versicolor virginica 
## [43] virginica  virginica  virginica 
## Levels: setosa versicolor virginica

4. 분류모델 평가(예측결과 평가)

t <- table(p, test$Species) # 예측결과, 원형 test의 y변수 
t
##             
## p            setosa versicolor virginica
##   setosa         14          0         0
##   versicolor      0         15         2
##   virginica       0          2        12

5. 분류 정확도

(t[1,1]+t[2,2]+t[3,3])/nrow(test)
## [1] 0.9111111