나이브베이즈(Naive Bayes)
- 데이터를 나이브하게 독립적인 사건으로 가정하고 이 독립사건을 베이즈이론에 대입시켜 가장 높은 확률의 레이블로 분류를 실행하는 알고리즘이다.
- 사전확률 정보를 이용하여 사후확률을 예측하는 이론
- 패턴분석에 주로 사용됨
P(A|B) : 어떤 사건 B가 일어났을때 사건 A가 일어날 확률
P(B|A) : 어떤 사건 A가 일어났을때 사건 B가 일어날 확률
P(A) : 어떤 사건 A가 일어날 확률
P(B) : 어떤 사건 B가 일어날 확률
P(B|A) = P(A∩B) / P(A) = P(A|B) * P(B) / P(A)
P(A∩B) = P(A|B) * P(B)
P(B∩A) = 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 라이브러리 설치 및 불러오기 install.packages("e1071") library(e1071) |
|
# 데이터 불러오기 및 구조 확인 |
|
# 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,] |
'인공지능 > 머신러닝' 카테고리의 다른 글
베르누이 나이브베이즈 (0) | 2020.05.14 |
---|---|
붓꽃 데이터 (iris.csv) 분석하기 / 가우시안 나이브베이즈 (0) | 2020.05.13 |
사건과 확률 (0) | 2020.05.12 |
혼동행렬 / 정확도 / 정밀도 / 재현율 / F1 점수 (0) | 2020.05.11 |
유방암 데이터 분석하기 (1) | 2020.05.11 |