1. naive Bayes
- optimal classify => 오류를 줄여야 한다 => y면 y가 최대의 확률이 나오도록 함
1). MLE and MAP
- MLE는 이미 나온 결과만 가지고 확률을 측정(만약 학습 데이터에서 한쪽의 확률이 100%이면 나머지는 0%가 되어버린다)
2) Bayes Risk
- disicion boundary : 사전확률과 예측값이 같아지는 확률
3) optimal 방법
- 결과에 맞게 분류되도록 하는 최대 값이 나오도록 함
2. 핵심 pseudo code
1) 학습용 데이터, 테스트용 데이터
trainingData = [
(1, "Chinese Beijing Chinese", True),
(2, "Chinese Chinese Shanhai", True),
(3, "Chinese Macao", True),
(4, "Tokyo Japan Chinese", False),
]
testingData = (5, "Chinese Chinese Chinese Tokyo Japan")
2) 데이터셋
V = list(set([term for _ in trainingData for term in _[1].lower().split()]))
N = len(trainingData)
trueData = [_ for _ in trainingData if _[2] == True]
falseData = [_ for _ in trainingData if _[2] == False]
3) Textc
from collections import defaultdict
Tct = defaultdict(int)
for data in trueData:
Nc = len(data)
PriorC = Nc/N
for term in data[1].lower().split():
Tct[term] += 1
_Tct = defaultdict(int)
for data in falseData:
_Nc = len(falseData)
_PriorC = _Nc/N
for term in data[1].lower().split():
_Tct[term] += 1
4) 누적 데이터 만들기
condProbC = defaultdict(float)
_condProbC = defaultdict(float)
countSum = sum(Tct.values())
_countSum = sum(_Tct.values())
for term, freq in Tct.items():
#condProbC[term] = freq/countSum
condProbC[term] = (freq+1)/(countSum+len(V)) # add one smoothing(문서가 많아져서 0이되는 문제를 해결)
for term, freq in _Tct.items():
#condProbC[term] = freq/countSum
_condProbC[term] = (freq+1)/(_countSum+len(V)) # add one smoothing(문서가 많아져서 0이되는 문제를 해결)
5)
# P(C)Multi(P(Tct|C)) ===> log(P(C)) + Sum(P(Tct|C))
from math import log, exp
# Prior
result = log(PriorC)
_result = log(_PriorC)
# => Joint Prob => Conditional Independence
for term in testingData[1].lower().split():
# Multi => Log Sum
result += log((Tct[term]+1)/(countSum+len(V)))
_result += log((_Tct[term]+1)/(_countSum+len(V)))
#Optimal
if result > _result:
print("True", result, exp(result), exp(_result))
else:
print("False", _result, exp(_result))
'데이터 분석가 역량' 카테고리의 다른 글
day 28 ] 성능평가 (0) | 2019.06.11 |
---|---|
Day 27 ] 기사 분류 (0) | 2019.06.10 |
Day 22 ] Classification (0) | 2019.05.30 |
Day 21 ] Project2 유사도 분석 (0) | 2019.05.29 |
Day 20] 내 파일로 분석해보기 (0) | 2019.05.29 |