인공지능/머신러닝

나이브베이즈(Naive Bayes) 분류

해피밀세트 2020. 5. 12. 20:44

 

 

나이브베이즈(Naive Bayes)

  • 데이터를 나이브하게 독립적인 사건으로 가정하고 독립사건을 베이즈이론에 대입시켜 가장 높은 확률의 레이블로 분류를 실행하는 알고리즘이다.
  • 사전확률 정보를 이용하여 사후확률을 예측하는 이론
  • 패턴분석에 주로 사용됨

 

P(A|B) : 어떤 사건 B 일어났을때 사건 A 일어날 확률

P(B|A) : 어떤 사건 A 일어났을때 사건 B 일어날 확률

P(A) : 어떤 사건 A 일어날 확률

P(B) : 어떤 사건 B 일어날 확률

 

 

P(B|A) = P(AB) / P(A) = P(A|B) * P(B) / P(A)

P(AB) = P(A|B) * P(B)

P(BA) = P(B|A) * P(A)

 

예) ADsP - 빈도

  YES NO TOTAL
합격 33 19 62
불합격 26 12 38

 

예) ADsP - 우도

  YES NO TOTAL
합격 33/62 19/62 62
불합격 26/38 12/38 38

 

P(ADsP|합격) : 우도(likelhood), 어떤 일이 있을 공산(가능성)

P(합격) : 사전확률

P(ADsP) : 주변 우도(marginal likelhood)

P(합격|ADsP) : 사후확률

 

사후확률 = 우도 * 사전확률 / 주변우도

             = P(ADsP|합격)  * P(합격) / P(ADsP)

             = ((33/62) * (62/100)) / (59/100)  = 0.56

 

결론 : ADsP를 합격할 확률은 56% 된다.

 


 

 

통계식을 이용한 나이브베이즈

 

  SQL 파이썬 R C++ TOTAL
YES NO YES NO YES NO YES NO
합격 15 6 20 2 11 3 12 11 80
불합격 5 2 1 3 3 0 4 2 20

 

1. SQL = YES, 파이썬 = NO, R = NO, C++ = YES 일때 합격일 확률값?  ∴ 44%

P(합격 | SQL ∩ ㄱ파이썬 ∩ ㄱR ∩ C++)

= P(SQL ∩ ㄱ파이썬 ∩ ㄱR ∩ C++) * P(합격) / P(SQL ∩ ㄱ파이썬 ∩ ㄱR ∩ C++)

= (P(SQL|합격) * P(ㄱ파이썬|합격) * P(ㄱR|합격) * P(C++|합격) * P(합격)) / P(SQL) * P(ㄱ파이썬) * P(ㄱR) * P(C++)

= ((15/80)*(2/80)*(3/80)*(12/80)*(80/100))/((20/100)*(5/100)*(3/100)*(16/100))

= 0.44

 

1-1 우도를 사용

합격의 우도 = (15/80)*(2/80)*(3/80)*(12/80)*(80/100) = 2.109375e-05

불합격의 우도 = (5/20)*(3/20)*(0/20)*(4/20)*(20/100) = 0

합격 = 합격의 우도 / (불합격의 우도 + 합격의 우도) 

       = 1

 

 

2. SQL = YES, 파이썬 = NO, R = NO, C++ = YES 일때 불합격일 확률값?  ∴ 0%

P(합격 | SQL ∩ ㄱ파이썬 ∩ ㄱR ∩ C++)

= P(SQL ∩ ㄱ파이썬 ∩ ㄱR ∩ C++) * P(불합격) / P(SQL ∩ ㄱ파이썬 ∩ ㄱR ∩ C++)

= (P(SQL|불합격) * P(ㄱ파이썬|불합격) * P(ㄱR|불합격) * P(C++|불합격) * P(불합격)) / 

    P(SQL) * P(ㄱ파이썬) * P(ㄱR) * P(C++)

= ((5/20)*(3/20)*(0/20)*(4/20)*(20/100))/((20/100)*(5/100)*(3/100)*(16/100)) 

= 0

 

2-1 우도를 사용

합격의 우도 = (15/80)*(2/80)*(3/80)*(12/80)*(80/100) = 2.109375e-05

불합격의 우도 = (5/20)*(3/20)*(0/20)*(4/20)*(20/100) = 0

불합격 = 불합격의 우도 / (불합격의 우도 + 합격의 우도) 

          = 0

 

 

3. 라플라스 추정기

  • 분자에 1 더하기

3-1 우도를 사용

합격의 우도 = (16/84)*(3/84)*(4/84)*(13/84)*(80/100) = 2.109375e-05

불합격의 우도 = (6/24)*(4/24)*(1/24)*(5/24)*(20/100) = 0.0001

합격 = 합격의 우도 / (불합격의 우도 + 합격의 우도)

       = 0.174194

불합격 = 불합격의 우도 / (불합격의 우도 + 합격의 우도) 

          = 0.825806

 


 

R에서 나이브베이즈 사용하기

 

# e1071 라이브러리 설치 및 불러오기
#
e1071 : 오스트리아 비엔나 기술대학교 통계학과에서 만든 라이브러리

install.packages("e1071")

library(e1071)

 

# 데이터 불러오기 및 구조 확인

movie <- read.csv("C:/data/movie.csv", header=T)
str(movie)

# naiveBayes(학습데이터,라벨)로 학습

nm <- naiveBayes(movie[1:5],movie$장르,laplace=0)
# 예측하기

result <- predict(nm,movie[1:5])
# 예측한 값 컬럼으로 추가

cbind(movie,result)
# 실제값과 예측값이 다른 행 보기

movie$result <- result
movie[movie$장르 != movie$result,]

 

반응형