티스토리 뷰

반응형



지도학습 알고리즘

나이브 베이즈(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%의 정확도를 갖는 모델을 얻었는데, 이보다 더 높은 정확도를 갖기위해선 자주등장하는 단어의 개수를 변경하거나 라플라스 상수를 추가하는 방법 또는 기존 데이터를 셔플해서 모델을 구성하는 등의 각종 방법을 사용해볼 수 있습니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
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 29 30
31
글 보관함