티스토리 뷰
지도학습 알고리즘
지도학습 관련 알고리즘들로는
분류 규칙 학습자 (Classification Rule Learners)
선형 회귀 (Linear Regression)
회귀 트리 (Regression Trees)
모델 트리 (Model Trees)
신경망 (Neural Networks)
서포트 벡터 머신 (Support Vector Machines)
등 ......
오늘은 베이지안 기법을 사용해 발전한 분류방법인 나이브 베이즈 분류에 대해 알아보겠습니다.
나이브 베이즈(Naive Bayes) - 이론 : 베이즈 정리
나이브 베이즈 분류를 이해하기 위해선 나이브 베이즈의 기본이 되는 베이즈 정리에 대해서 먼저 알아볼 필요가 있습니다.
조건부 확률 P(A|B) 는 사건 B 가 발생한 경우 A 의 확률 을 나타냅니다.
베이즈 정리는 P(A|B) 의 추정이 P(A∩B) 와 P(B) 에 기반을 두어야한다는 정리 입니다.
예제를 통해 하나씩 살펴보겠습니다.
전체 사건 중 비가 온 확률은 P(비) = 7/20 입니다. 그렇다면 비가 안온 확률은 얼마일까요?
P(~비) = 13/20 이겠죠. 비가 오는지 안오는지 같이 둘 중 하나의 상태만 가능한 사건들은 모든 경우의 수를 더했을 때 1이 됩니다.
그렇다면 이제 P(비|맑은날) 의 값은 얼마일지 알아볼까요?
위 식을 통해 P(비|맑은날) 을 구하기 위해선 P(맑은날|비), P(비), P(맑은날) 이 세개의 값만 알아내면 됩니다.
P(비|맑은날) = P(맑은날|비) * P(비) / P(맑은날)
= (2/7) * 0.35 / 0.5 = 0.2
전체중에서 맑은날 이면서 비가올 확률은 20% 정도 된다고 볼 수 있을 것 같습니다.
나이브 베이즈(Naive Bayes) - 예제1 : 비오는 날
나이브 베이지안에서 나이브(Naive) 는 순진하다 라는 뜻을 가지고 있습니다. 이런 수식어가 붙은 이유는 데이터셋의 모든 특징들이 동등하고 독립적이라고 가정하기 때문입니다. 예를들어 비가 오는 날에는 시간보다는 습도가 더 중요한 변수가 될 수 있지만 나이브베이지안 에서는 이런 사실을 무시하기 때문입니다. 하지만 이런 가정에도 불구하고 분류학습에서 매우 정확한 결과 값을 내놓기 때문에 자주 사용되고 있습니다.
위의 비 & 맑은날 데이터를 확장해서 진행해보겠습니다.
만약 오늘 날씨가 좋고, 바람이 많이 불지 않고, 기압은 높은데, 온도가 낮다면 오늘은 비가 올것인가? 안올것인가? - 이 질문을 식으로 바꿔보면.
오늘 날씨가 좋고, 바람이 많이 불지 않고, 기압은 높은데, 온도가 낮다면 비가 올 확률은 2.7%이고 비가 안 올 확률은 97.3% 로 계산됩니다. 이 데이터에 따르면 날씨 좋고, 바람 안불고, 기압 높은데, 온도 낮은날은 비가 안 올 가능성이 높은 것 같습니다.
나이브 베이즈(Naive Bayes) - 예제2 : Spam 메일
스팸메일을 분류하는 서비스는 나이브베이즈를 이용하는 대표적인 서비스 입니다. 관련 데이터는 이곳에서 받으셔서 진행하실 수 있으며 이곳에서는 세부 코드를 보실 수 있습니다.
데이터는 TYPE 과 TEXT 컬럼으로 구성되어 있으며 총 5559개의 SMS 를 포함하고 있습니다.
위의 예제1 에서 날씨가 오는지 안오는지, 온도가 높은지 낮은지 등등에 따라 분류 했던 것 처럼 Hope 라는 단어가 들어갔는지, food 라는 단어가 들어갔는지 등 단어별로 컬럼을 구성해주어야 나이브 베이즈 분류를 사용할 수 있습니다.
이를 위해 데이터 정제 작업을 거치는데 이 과정에는 type 팩터화, 숫자 제서, 소문자화, 불용어 제거, 구두점 제거 형태소 분석 등의 작업을 진행합니다. 이 세부 방법은 다른 포스트에서 진행하겠습니다. 이 모든 과정을 거친 뒤의 행렬인 DTM(Document Term Matrix) 은 다음과 같습니다.
각 idx(메시지) 마다 어떤 단어가 들어가 있는지 1과 0으로 표현되는 Matrix 를 Train 데이터(4169개)와 Test 데이터(1390개)로 나누어 e1071 라이브러리에서 제공하는 나이브베이즈 모델로 분류해보면 결과는 다음과 같습니다.
1390개 중 1353개가 올바르게 분류하고, 37개가 오분류를 하였습니다. 실제로는 스팸인데 햄이라고 분류한 34개의 메일도 줄여야 하지만 실제 서비스에선 실제로는 햄인데 스팸이라고 분류한 3개의 결과를 줄이는 것이 무엇보다 중요합니다.
간단한 모델로 97.3%의 정확도를 갖는 모델을 얻었는데, 이보다 더 높은 정확도를 갖기위해선 자주등장하는 단어의 개수를 변경하거나 라플라스 상수를 추가하는 방법 또는 기존 데이터를 셔플해서 모델을 구성하는 등의 각종 방법을 사용해볼 수 있습니다.
'머신러닝' 카테고리의 다른 글
[딥러닝] 뉴럴 네트워크 Part. 1 - 새로운 머신러닝 (4) | 2018.03.18 |
---|---|
[머신러닝] 의사결정트리 (Decision Trees) (6) | 2017.12.04 |
[머신러닝] K-최근접 이웃 (K-Nearest Neighbor) (14) | 2017.11.28 |
1 - 3. 머신러닝의 알고리즘 타입 - 강화학습 (0) | 2017.11.26 |
1 - 2. 머신러닝의 알고리즘 타입 - 비지도학습 (0) | 2017.11.25 |
- Total
- Today
- Yesterday
- 가평캠핑
- Oracle
- 자연힐링
- 가족여행
- 서울근교캠핑
- 영월캠핑
- 글램핑
- 영월여행
- 여름휴가
- 가평여행
- python
- bukhansannationalpark
- 캠핑장추천
- 반려견캠핑
- 캠핑초보
- sql
- 강원도캠핑
- 가족캠핑
- 카카오
- 머신러닝
- 계곡캠핑
- 백준
- SeoulTravel
- Koreancuisine
- 파이썬
- 강원도여행
- 여름휴가추천
- 알고리즘
- 커플여행
- 여름캠핑
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |