교육 정보
- 교육 명: 경기미래기술학교 AI 교육
- 교육 기간: 2023.05.08 ~ 2023.10.31
- 오늘의 커리큘럼:
파이썬 기반의 머신러닝 이해와 실습 (06/14~07/07)- 강사: 양정은 강사님
- 강의 계획:
1. 개발환경세팅 - IDE, 가상환경
2. 인공지능을 위한 Python
3. KNN 구현을 위한 NumPy
4. K Nearest Neighbors Classification 구현
5. K Means Clustering Mini-project
6. Scikit-learn을 이용한 SVM의 학습
7. Decision Tree의 개념
8. ID3 Algorithm
9. Impurity Metrics - Information Gain Ratio, Gini Index
10. Decision Tree 구현
11. 확률 기초
12. Bayes 정리 예시
13. Naive Bayes Classifier
14. Gaussian Naive Bayes Classifier
import pandas as pd
table = pd.DataFrame(index=['cancer', 'healthy'])
table['prior'] = 0.001, 0.999
table['likelihood'] = 0.95, 0.02
table['unnorm'] = table['prior'] * table['likelihood']
# 이 상태(joint prob)에서는 다 더해도 1이 아니므로 normailzation이 되지 않은것
norm_constant = table['unnorm'].sum()
table['posterior'] = table['unnorm'] / norm_constant
print(table)
print()
g_table = pd.DataFrame(index=['class1', 'class2', 'class3'])
g_table['prior'] = 1 / 3, 1 / 3, 1 / 3
g_table['likelihood'] = 0.6, 0.5, 0.4
g_table['unnorm'] = g_table['prior'] * g_table['likelihood']
g_norm_constant = g_table['unnorm'].sum()
g_table['posterior'] = g_table['unnorm'] / g_norm_constant
print(g_table)
print()
#
# 결과
prior likelihood unnorm posterior
cancer 0.001 0.95 0.00095 0.045389
healthy 0.999 0.02 0.01998 0.954611
prior likelihood unnorm posterior
class1 0.333333 0.6 0.200000 0.400000
class2 0.333333 0.5 0.166667 0.333333
class3 0.333333 0.4 0.133333 0.266667
def get_posterior(data):
data['unnorm'] = data['prior'] * data['likelihood']
norm_constant = data['unnorm'].sum()
data['posterior'] = data['unnorm'] / norm_constant
return data
table = pd.DataFrame(index=['cancer', 'healthy'])
table['prior'] = 0.001, 0.999
table['likelihood'] = 0.95, 0.02
table = get_posterior(table)
print(table, '\n')
g_table = pd.DataFrame(index=['class1', 'class2', 'class3'])
g_table['prior'] = 1 / 3, 1 / 3, 1 / 3
g_table['likelihood'] = 0.6, 0.5, 0.4
g_table = get_posterior(g_table)
print(g_table, '\n')
#
# 결과
prior likelihood unnorm posterior
cancer 0.001 0.95 0.00095 0.045389
healthy 0.999 0.02 0.01998 0.954611
prior likelihood unnorm posterior
class1 0.333333 0.6 0.200000 0.400000
class2 0.333333 0.5 0.166667 0.333333
class3 0.333333 0.4 0.133333 0.266667
📕 강사님 코드
def get_posterior(data, likelihood): data['likelihood'] = likelihood data['unnorm'] = data['prior'] * data['likelihood'] norm_constant = data['unnorm'].sum() data['posterior'] = data['unnorm'] / norm_constant return data table = pd.DataFrame(index=['cancer', 'healthy']) table['prior'] = 0.001, 0.999 table = get_posterior(table, likelihood=[0.95, 0.02]) print(table, '\n') g_table = pd.DataFrame(index=['class1', 'class2', 'class3']) g_table['prior'] = 1 / 3, 1 / 3, 1 / 3 g_table = get_posterior(g_table, likelihood=[0.6, 0.5, 0.4]) print(g_table, '\n') # # 결과 prior likelihood unnorm posterior cancer 0.001 0.95 0.00095 0.045389 healthy 0.999 0.02 0.01998 0.954611 prior likelihood unnorm posterior class1 0.333333 0.6 0.200000 0.400000 class2 0.333333 0.5 0.166667 0.333333 class3 0.333333 0.4 0.133333 0.266667
- point
- prior가 포함된 테이블을 인수로 넣음
- prior는 계속 업데이트 되므로 처음 한번만 넣으면 됨
- likelihood를 따로 인수로 넣음
- likelihood는 정보가 들어올때 바뀔 수 있으므로 인수로 넣음
정보 (스팸일 확률 기준)
2개의 조건을 각각 사용
→ 두 조건을 하나씩 사용하여 확률을 업데이트 했을때는 W 조건이 더 높은 확률을 반환함
→ 두 조건을 동시에 적용해서 Posterior Probability를 구할 수 있음
1st step
2nd step
(참고) MLE, MAP
- MLE, Maximum Likelihood Estimation
: Likelihood 기반 판단- MAP, Maximum A Posterior Probability
: Posterior Probabaility 기반 판단
ex)- 연구실에 긴 머리카락
→ 여자가 떨어뜨렸을 확률이 높음 (MLE)
- 연구실에 긴 머리카락 + 연구실 100 명이 있는데 그 중 여자는 한명, 긴 머리의 남자는 스무 명
→ 남자가 떨어뜨렸을 확률이 높음 (MAP)