brunch

You can make anything
by writing

C.S.Lewis

by 루퍼트 Jul 04. 2016

4. 스팸필터, 나이브베이즈, 경합

도서 | 데이터과학 입문 요약


데이터과학 입문의 도서를 공부하며 정리하는 글입니다.

개인적인 견해는 들어가지 않습니다.


데이터 분석을 통해 스팸을 가려내는 프로그램을 만들어 보자

확률모형을 사용하여 주어진 메일이 스팸일 확률을 계산해주는 경험적 규칙을 만들자

KNN이나 선형회귀 방식은 어떨까?


선형회귀는 스팸을 걸러낼 수 없다.

그 이유를 설명하기 위해 선형회귀로 그 과정을 다가가보면...

이메일 데이터세트의 각 메일에 포함된 단어로 특징을 만든다.

예를 들어 ‘비아그라’ 단어가 출현하는 횟수를 센다.

선형회귀를 사용하기 위해 훈련데이터세트를 만들어야 한다.

y=f(x) 형태로 만들어질 수 있게, 어떤 결과변수로 분류되어 있어야 한다(‘스팸이다’, ‘아니다’)

여기서 발생하는 문제 : true, false(이진) 으로 구분되어지는 결과가 나와야 한다.

선형회귀로는 0 or 1의 결과를 얻는방법은 전혀 좋지 않다.

굳이! 적용하자면 경계값 N을 두고 이를 통해 스팸,non-스팸을 구분하는 방법.

단어의 갯수는 수십만 이상이 존재하므로, 이 계산과정에서 얻어지는 행렬은 계산이 불가능하다.

(혹은 비효율적이다)


KNN 을 이용하여 스팸필터를 만든다면?

단어가 있는지 확인을 하고 두 이메일 간의 어떤 단어가 공유되는지에 따라 서로 가깝고 먼 것에 대한 정의를 해야한다.

모든 단어를 지원할 수 있는 차원의 수가 너무 많아져서 공간간의 거리를 계산하기에는 많은 작업이 필요

또한, 가까운 이웃(유사한 메일)조차 간극이 너무 멀다는 버린다는 차원의 저주가 발생


스팸필터를 만들때....

KNN이나 선형회귀는 좋은 방법이 아니다.

스팸의 확률을 계산해주는 확률모형을 사용하는 것이 좋다.


최근에는 확률적 경사법을 채택하기 시작했다.

로지스틱 회귀로 전환한 것이 도움이 되었고, 단어들 간의 상관관계를 잘 설명할 수 있었다고 함.

하지만 나이브베이즈는 보다 간단한 장점이 있다.

로지스틱 회귀 :  독립 변수의 선형 결합으로 종속 변수를 설명한다는 관점에서는 선형 회귀 분석과 유사하다.
하지만 로지스틱 회귀는 선형 회귀 분석과는 다르게 종속 변수가 범주형 데이터를 대상으로 하며 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나눠지기 때문에 일종의 분류 (classification) 기법으로도 볼 수 있다. (위키피디아)

나이브 베이즈

사용자 마음대로 규모를 조정할 수 있고, 직관적으로 이해가 잘 되는 분류방법

p( x | y ) : y 일때 x가 발생할 확률

위의 공식을 활용하여 베이즈의 법칙을 유도할 수 있다.

p(y | x)p(x)
= p(x,y) (x와 y가 둘다 일어날 확률)      p(x | y)p(y)            p(y | x)      = (p(x | y) p(y)) / p(x)      

p(y | x)p(x)
= p(x,y) (x와 y가 둘다 일어날 확률)
= p(x | y)p(y)

p(y | x)
= (p(x | y) p(y)) / p(x)

j 번째 단어가 등장하는지 아닌지에 따라 j번째 항의 값은 1 or 0이다.

선형회귀에서는 아주 큰 행렬의 역행렬을 구해서 계수 w_j 를 구하지만 나이브베이즈에서는 알고리즘으로 가중치를 계산함.

수많은 이메일 중 스팸 비스팸 안에 있는 단어를 센다. 훈련 데이터가 많아지면 단어개수를 세서 더해주기만 하면 필터의 성능이 올라간다.

훈련이 필요하다.


나이브 베이즈 - 예시

아픈 사람의 99%가 검사에서 양성 이었다

건강한 사람의 99%가 검사에서 음성 이었다

Q : 어떤 사람이 양성반응을 보였다면 이 사람이 정말 병에 걸렸을 확률?

해석을 위한 트리 다이어그램

베이즈의 법칙 유도

p(y | x) = (p(x | y) p(y)) / p(x)

P( x ) : x일 확률
sick : 아프다, + : 양성

p(sick | +) = (p(+ | sick) p(sick)) / p(+)
= 0.99 * 0.01 / (0.99 * 0.01 + 0.01 * 0.99) = 0.50 = 50%

베이즈의 법칙 유도 - 결론

위의 명제를 바꾸어 스팸필터를 만들어 볼 수 있다.

-> 단어의 N%가 스팸이었다.

-> 스팸의 N%가 단어였다.

훈련, 검증 데이터에 위의 조건을 도입하여  A단어가 스팸일 확률을 유추해 볼 수 있다.

-> B, C단어로 반복


나이브베이즈와 KNN의 비교

유사도 계수 : 나이브베이즈는 맞다, 아니다를 기준잡는 계수가 자유롭게 변함. KNN은 k값만으로 조정

선형분류기 : 나이브베이즈는 선형분류기이지만, KNN은 아니다

차원의 저주 : 나이브베이즈는 관련이 없지만, KNN은 특징 조건들에 따른 차원의 저주가 존재한다

훈련 : 나이브베이즈는 훈련이 필요하다. KNN은 필요없다.

매거진의 이전글 3-2 알고리즘 kNN,k-평균법
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari