조건부 확률 적용 예측 / 비교적 성능 우수 / 베이즈 이론 적용
# 조건부 확률 : 사건 A가 발생한 상태에서 사건 B가 발생할 확률
# P(B|A) = P(A|B) * P(B) / P(A)
# install.packages(e1071)
library(e1071)
## Warning: package 'e1071' was built under R version 3.3.3
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
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
# 형식) 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
t <- table(p, test$Species) # 예측결과, 원형 test의 y변수
t
##
## p setosa versicolor virginica
## setosa 14 0 0
## versicolor 0 15 2
## virginica 0 2 12
(t[1,1]+t[2,2]+t[3,3])/nrow(test)
## [1] 0.9111111