Stack Building
[분류] 베이즈 분류 본문
1. 기본 개념
ㅡ지도학습 (분류): 학습 데이터(training data, 관측치, 값 등)는 정답(분류 결과, 클래스)을 알려주는 레이블이 붙어있다. 새로운 데이터는 이 학습 데이터를 기반으로 분류된다.
<<분류classification와 수치 예측numeric prediction>>
분류는 이산/명목형 자료와 같은 범주형 클래스 레이블을 추정한다. 학습 데이터 셋과 그 값(클래스 레이블)을 분류한classify 것에 기반한 모델을 생성하여 새로운 속성을 분류하는 데 사용한다. flat하게 나누는 것과 계층이 있게 나누는 것으로 또 나뉠 수 있다. flat한 분류는 여학생/남학생으로 분류하는 것이 있고, 계층이 있는 분류는 저학년/고학년으로 분류하는 것이 있다. 수치 예측은 알려지지 않거나 결측치와 같은 연속값 함수를 모델링한다.
ㅡ비지도학습 (클러스터링): 학습 데이터의 레이블을 알지 못한다.
2. 분류의 두 가지 단계
2-1. 모델 구축
- 정답이 있는 데이터: 미리 분류되어 있는predetermined 경우를 가정한다. 즉 각 데이터 튜플은 클래스 레이블 속성에 의해 미리 정의된 클래스를 가진다.
- 학습 데이터셋(정답이 있는 데이터들의 모음)으로 모델 구축
- 모델은 분류 규칙/의사결정나무/수학 공식 등. 여러가지 알고리즘이 있다.
2-2. 모델 사용
- 알려지지 않은 개체를 분류
- 정확도 추정: 예제를 보면 테스트 데이터에도 정답이 붙어있는 경우가 많은데, 모델의 정확도를 측정하기 위함이다. 테스트 샘플은 classified된 결과물과 정답을 비교한다. 정확도는 테스트 샘플이 얼마나 잘 분류되었는가이다. 테스트 데이터셋은 학습 데이터셋과 독립적이다. 그렇지 않을 경우 과적합된다. 정확도가 수용가능할 겨우, 새로운 데이터를 분류하기 위해 모델을 사용할 수 있다. 선택된 모델의 테스트 데이터셋은 검증 세트(validation set)라고 부른다.
3. 베이즈 분류 방법
3-1. 확률 모델
추론inference과 조건부 확률conditional probabilities
- 위 표에서 랜덤으로 추출된 표본의 사람이 여자일 확률은 P(female)=0.3이다.
- 두 가지 사건을 다루는 확률에는 '조건부 확률'과 '조인트 확률'이 있다. 조건부 확률이란 사건 B가 발생했다는 가정 하에 사건 A가 일어날 확률로, P(A|B)라고 표기한다. 전체 경우의 수에서 특정 조건일 확률만 볼 수 있다. 조인트 확률은 두 개의 서로 다른 사건이 동시에 일어나는 확률로, P(A,B)라고 표기한다. 이 둘은 유사해 보이지만, 전혀 다르다. 조건부 확률은 사건 B의 발생 확률은 계산에 들어가지 않는다. 이미 발생했다고 보기 때문이다. 발생해버린 사건의 확률은 알 필요가 없는 것이다. 그 일이 일어나는 경우의 수만 알면 된다. 그러나 조인트 확률은 고려해야 할 사건이 두 개이다. A도 발생해야 하고, B도 발생해야 한다. 그리고 이것이 따로따로 발생하는 것이 아니라 동시에 발생해야 한다. 그렇기 때문에 P(A, B)는 P(A)*P(B)가 아니라 P(A|B)*P(B)이다.
- 따라서 P(female, books)는 '뽑은 책을 좋아하는 사람이 여자일 확률'에 '책을 좋아하는 사람을 뽑을 확률'을 곱해야 한다. 이 경우에는 2/5(확률로 계산하지 않고, 이미 발생했다고 보고 경우의 수로 계산.)*5/10=0.2가 된다. 의미가 같기 때문에 계산 순서가 바뀌어도 결과는 P(books, female)=2/3*3/10로 같다. 곱의 법칙이 동시에 일어나면 확률을 곱하라고 했으니까 P(female)*P(books)로 생각할 수도 있다. 하지만 뽑은 사람이 여자일 확률과 뽑은 사람이 책을 좋아할 확률을 각각 곱하면 두 경우 다 분모(전체 경우의 수)를 전체집합으로 보게 된다. 뽑은 한 사람이 (여자이고 책을 좋아함)이 아니라 두 사람이 전체에서 한 명씩 뽑았는데 한 사람이 뽑은 사람이 (여자)일 확률과 다른 사람이 뽑은 사람이 (책을 좋아함)일 확률인 것이다. 한 번에 한 명을 뽑았는데 어떤 조건을 만족해야 한다면 결합확률이다.
- 따라서 수학적으로 보았을 때, P(A|B)는 P(A,B)보다 크거나 같아야 한다. 당연한 말이다. P(B)가 0~1의 값을 가지기 때문이다. 즉 P(A,B)는 위에서 구구절절 썼듯이 P(A)P(B)가 아니다. 하지만 A, B가 통계적으로 독립적일 때 P(A,B)는 P(A)P(B)와 같다. 통계적으로 독립적이라는 뜻은 두 사건들 간에 전혀 상관성이 없는 경우다. 한 사건의 발생이 다른 사건의 발생 확률에 전혀 영향을 주지 않는다.
3-2. 베이즈 정리
P(X,Y)=P(Y,X)이므로 이를 전개하면 P(X|Y)P(Y)=P(Y|X)P(X)가 된다. 이를 이항하면 P(X|Y)=P(Y|X)P(X)/P(Y)가 된다. 이를 베이즈 규칙이라고 한다. 베이즈 규칙은 하나의 조건부 확률로 다른 조건부 확률을 계산할 수 있다. 베이즈 규칙은 상황(evidence, y)와 가설(hypothesis, x)을 지원하는 상대적인 정도로 생각하면 된다.
예시
수막염은 뻣뻣한 목을 50%의 확률로 유발한다. 환자가 수막염이 있을 확률은 1/50000이고, 환자가 목이 뻣뻣한 확률은 1/20이다. 이때 환자가 목이 뻣뻣할 경우 그가 수막염일 확률은 어느 정도인가?
=> 환자는 이미 목이 뻣뻣하다. 조건부 확률 문제이다. P(수|목)을 구하면 된다. P(수|목)은 베이즈 정리에 의해 P(목|수)P(수)/P(목)과 같다. 따라서 0.5*1/50000/1/20=0.0002이다.
3-3. 베이즈 정리를 분류에 사용하기
"독립이 아니더라도 독립으로 가정한다"
변수 각각과 클래스 레이블을 랜덤 변수라고 가정하자. 주어진 레코드가 (X1, X2,…, Xd) 일 때, Y를 예측하는 것이 목적이다. 특히 우리는 P(Y|X1, X2,…, Xd)가 최대치가 되는 값을 찾는 것이 목표이다. 우리가 이 확률을 데이터에서 바로 추정할 수 있는가? 사후확률(posterior probability)인 P(Y | X1, X2, …, Xd)를 베이즈 정리로 계산하면 P(X1, X2, …, Xd|Y)P(Y)/P(X1, X2, …, Xd)이다. 사후확률을 최대화하려면 P(Y | X1, X2, …, Xd)를 최대화하는 Y를 고른다. P(X1, X2, …, Xd)가 모든 클래스에서 상수로 동일하기 때문에 P(X1, X2, …, Xd | Y) P(Y)를 최대화하는 Y를 선택하는 것과 같다. 그렇다면 P(X1, X2, …, Xd | Y )를 추정하는 방법은 무엇일까?
바로 나이브 베이즈 분류기를 사용하는 것이다. 즉, Xi 변수들 사이에 독립성을 가정하는 것이다. 그렇게 되면 P(X1, X2, …, Xd | Yj ) = P(X1 | Yj ) P(X2 | Yj )… P(Xd | Yj )이 되고, P(Xi|Yj)를 학습 데이터의 모든 Xi와 Yj 조합에 대하여 추정할 수 있게 된다. 나이브 베이즈 분류기는 만약 P(Yj )πP(Xi | Yj ) 가 최대일 경우 새로운 포인트를 Yj로 분류한다. (여기서 파이는 무한곱)
3-4. 나이브 베이즈 분류기의 적용 예시
위의 표에서 P(“Evade = Yes” | X), P(“Evade = No” |X)을 추정하는 방법은 베이즈 정리를 이용하는 것이다. P(X|Yes)P(Yes)/P(X)와 P(X|No)P(No)/P(X)가 된다. P(X | Yes) 는 P(Refund = No | Yes) x P(Divorced | Yes) x P(Income = 120K | Yes)이다. P(X | No)는 P(Refund = No | No) x P(Divorced | No) x P(Income = 120K | No)이다. P(Y) = Nc/N이라고 본다. (예를 들면 P(No) = 7/10이고 P(Yes) = 3/10) 범주형 변수의 경우를 먼저 살펴보면, P(Xi | Yk) = |Xik|/ Nc 이다. |Xik|는 Yk클래스에 속하고 Xi 값을 속성으로 가진 인스턴스의 개수이다. 예를 들면 P(Status=Married|No)는 No에 속하면서 Status가 Married인 수/No클래스의 수 = 4/7이다. 연속형 변수의 경우 가우시안 분포를 사용한다. (꼭 가우시안 분포를 사용할 필요는 없지만 분포 성향을 알면 그 특성을 가진 분포를 선택하는 것인데 잘 모를 땐 정규분포를 사용하기 때문에 여기에선 가우시안 분포를 적용한다.)
위 식은 (Xi ,Yj ) pair 각각에 하나씩 적용된다. 뮤는 평균, e는 오일러수, σ는 표준편차다. 예를 들어 (Income, Class=No)의 경우 Class가 No일 때의 표본 평균(sample mean)이 110이고 표본 분산(sample variance)이 2975일 때, 다음과 같이 계산한다.
따라서 테스트 레코드인 X = (Refund = No,Divorced,Income =120K)의 경우, 나이브 베이즈 분류기를 사용하여 분류할 때 다음과 같은 방식으로 분류된다.
ⓐ Xi 각각에 대한 확률을 구한다.
(범주형)
P(Refund = Yes | No) = 3/7
P(Refund = No | No) = 4/7
P(Refund = Yes | Yes) = 0
P(Refund = No | Yes) = 1
P(Marital Status = Single | No) = 2/7
P(Marital Status = Divorced | No) = 1/7
P(Marital Status = Married | No) = 4/7
P(Marital Status = Single | Yes) = 2/3
P(Marital Status = Divorced | Yes) = 1/3
P(Marital Status = Married | Yes) = 0
(연속형)
If class = No: sample mean = 110 sample variance = 2975 --->P(120|No)=0.0072
If class = Yes: sample mean = 90 sample variance = 25 ---> P(120|Yes)= 1.2*10^-9
ⓑ 주어진 레코드가 레이블로 분류될 각각의 확률을 구한다.
P(X | No) = P(Refund=No | No) * P(Divorced | No) * P(Income=120K | No) = 4/7 * 1/7 * 0.0072 = 0.0006
P(X | Yes) = P(Refund=No | Yes) * P(Divorced | Yes) * P(Income=120K | Yes) = 1 * 1/3 * 1.2 * 10^-9 = 4 * 10^-10
ⓒ 두 확률을 사용하여 값을 비교하고, 큰 쪽을 최종 class로 선택한다.
P(X | No) P(No) > P(X | Yes) P(Yes)
P(No | X) > P(Yes | X)
Class: No
3-5. 나이브 베이즈 분류기의 이슈
P(Yes | Married)를 구해야 할 경우가 생겼을 때, 이는 0 x 3/10 / P(Married)이다. 0은 뭘 곱해도 0이 되어버리기 때문에 비교에 의미가 없다. Tid=7 레코드가 삭제되었거나 존재하지 않는다고 가정하면 상황은 더 심각해진다. P(Refund=Yes |Yes)가 0이고 P(Divorced|No)가 0이라서 P(X|No)=0, P(X|Yes)=0이 되기 때문이다. 이렇게 되면 모순적contradictory인 결과가 발생한다. 나이브 베이즈가 주어진 데이터를 어느 쪽으로도 분류하지 못하게 되는 것이다.
"확률이 0이 되지 않게 하자"
어떤 조건부 확률이 0일 경우 모든 계산식이 0이 된다. 이를 막기 위해 간단한 방식 대신 다른 추정들을 사용할 필요가 있다. 확률 추정이므로 방식을 조금 바꿔도 괜찮다. Laplace 방식, m-estimate 방식이다.
c=클래스 개수, p=클래스의 사전확률, m=적당히 정한 파라미터,
Nc=클래스 안의 인스턴스 개수, Nic=클래스c에 속한 Ai값을 가지는 인스턴스의 개수
cf. 사전확률: 미리 알고 있는 확률. 보통 P(X) 등. 사후확률은 다른 사건을 관측한 후 그 원인이 되는 사건의 확률을 따져서 사후확률로 정의된다. 다른 사건의 정보가 더해진 사전확률의 업데이트 버전 정도로 보면 된다. P(X|Y).
라플라쎄 방식은 Nic에 1을 더한다. 직관적으로 0이 되는 것을 방지하는 것이다. 분자만 바뀌면 비율에 이상이 생길 것을 대비해 분모에도 c를 더한다. 엠에스티메이트는 분자에는 mp, 분모에는 m을 더한다.
예시
1000개의 튜플이 있는 데이터셋이 있다고 가정할 때, income 항목이 low인 튜플은 하나도 없고, medium은 990개, high인 것은 10개이다. 라플라시안 교정Laplacian correction(또는 laplacian estimator)을 사용하면 모든 케이스에 1을 더한다. P(low)=1/1003, P(medium)=991/1003, P(high)=11/1003이 된다. 이 '교정된' 확률 추정치는 교정하기 전의 확률과 유사하다.
4. 멀티노미알 나이브 베이즈
"3번에서는 추정할 때 가우시안 분포를 썼다면, 이제는 다항 분포multinomial distribution를 사용한다"
나이브 베이즈 알고리즘은 다항 데이터를 위한 것이다. 다항 데이터 분포는 k면의 주사위를 n번 굴릴 때의 counts의 확률을 모델링한다. 클래스의 개수 k가 2이고 시행 횟수 n이 1보다 클 때, 이는 이항 분포의 일반화이다. 다항 나이브 베이즈가 주로 사용되는 분야는 텍스트 분류이다. 문서는 term vector counts나 tf-inverse document frequency vectors로 표현한다. 분포는 벡터 θy = (θy1, ..., θyn)에 의해 각각의 클래스 y에 대해 매개변수화된다. n이 term의 개수(BOW 크기)이다. θyi는 샘플 안의 term i가 y 클래스에 속할 확률 P(xi|y)를 의미한다.
다항 분포에서의 확률 추정은 다음과 같은 식을 사용한다.
여기서 Nyi는 클래스 y의 샘플에서 term i가 나타난 횟수이고, Ny는 클래스 y의 모든 term의 총합이며 n은 term의 개수이다. 알파는 튜닝 파라미터인데, 알파가 1인 경우는 Laplace, 1보다 작은 경우는 Lidstone smoothing이라고 본다.언제 어떤 것을 쓰는가는 알파 값을 변화시켜가며 정확도가 높은 방법을 선택하는 것이다.
5. 나이브 베이즈 분류기 요약
5-1. 장점
- 구현이 쉽다.
- 대부분의 경우에서 좋은 결과를 보여준다.
5-2. 단점
- 가정) 일단 독립이라고 가정하여 정확도가 떨어진다
- 실제로는 변수들 간에는 어느정도 종속성dependencies이 있다. 병원의 환자 데이터의 경우, 나이, 가족력 등. 증상과 질병 등.
- 종속성이 있으면 나이브 베이즈 분류기로 모델링할 수 없기 때문에, 베이지안 빌리프 네트워크(BBN) 등의 다른 기술을 사용해야 한다.
6. 참고자료
1. 명지대학교 <인공지능> (전종훈 교수님) 강의안
'머신러닝' 카테고리의 다른 글
선형회귀 (0) | 2019.05.26 |
---|---|
[분류] 의사결정나무 (1) | 2019.05.26 |
[python] 데이터시각화 (0) | 2019.05.13 |
[aws] lamdba (0) | 2019.04.17 |
기계학습 (0) | 2019.04.16 |