참고 자료를 시작하기 전에
본 자료에서는 머신 러닝에서의 분류 문제, 특히 이진 분류(BInary Classification)로부터 지도학습을 배운다.
목표는 영화 추천 시스템을 구축하는 것인데, 실제 사례를 통해 더욱 쉽게 배울 수 있을 것이다.
나이브 베이즈(Naive Bayes) 알고리즘을 이용한 이진 분류, 기본 개념에 대해서 배운다.
끝으로는 모델의 미세 조정(Fine Tuning) 방법을 배운다.
1. 분류 시작하기
분류(Classification)는 지도 학습의 주요 응용 사례 중 하나이다.
분류의 목표는 훈련 데이터셋이 주어졌을 때, 관측값과 범주를 올바르게 매핑하는 일반 규칙을 학습하는 것이다.
└ 관측값(Observation) 또는 특징(Feature) 또는 예측 변수(Predictive Variable)
└ 범주(Category) 또는 레이블(Label) 또는 클래스(Class)
분류는 출력하는 클래스의 종류에 따라 크게 세 가지 유형으로 구분한다.
ㆍ 이진 분류(Binary Classification)
ㆍ 다중 클래스 분류(Multiclass Classification)
ㆍ 다중 레이블 분류(Multi-label Classification)
1.1. 이진 분류
이진 분류는 관측값을 두 개의 클래스 중 하나로 분류한다.
대표적인 예시는 다음과 같다
ㆍ 스팸 메일 필터링(spam email filtering)
ㆍ 고객 이탈 예측(customer churn prediction)
ㆍ 온라인 광고 클릭률 예측(click-through prediction)
ㆍ 조기 암 진단 분류
1.2. 다중 클래스 분류
다중 클래스 분류는 다항 분류(Multinomial Classification)라고도 한다.
관측값을 두 개 이상의 클래스로 분류한다.
대표적인 예시는 다음과 같다.
ㆍ 필기체 숫자 인식(handwritten digit recognition)
ㆍ 아이리스 꽃 품종 판별
1.3. 다중 레이블 분류
'이진 분류'와 '다중 클래스 분류'는 목표가 되는 클래스가 상호 배타적이며 오로지 한 레이블만 대응한다.
다중 레이블 분류에서는 범주(category)가 갖는 다양한 특성에 따라 여러 레이블을 할당한다.
n-레이블 분류 문제를 해결하는 일반적인 방식은 n개의 이진 분류 문제로 변환한다.
그리고 각 이진 분류 문제를 개별 이진 분류기로 처리하는 것이다.
이를 위한 분류 알고리즘들을 다음과 같은 것들이 있다.
ㆍ 나이브 베이즈(Naive Bayes)
ㆍ 서포트 벡터 머신(Support Vector Machine)
ㆍ 의사 결정 트리
ㆍ 로지스틱 회귀
2. 나이브 베이즈
나이브 베이즈(Naive Bayes) 분류기는 확률적 분류기 계열에 속한다.
모든 클래스에 대한 확률 분포를 예측하기 위해, 각 클래스에 속하는 특징의 예측 확률을 계산한다.
└ 특징(Feature) 또는 속성(Attribute) 또는 신호(Signal)
나이브 베이즈의 뜻은 구체적으로 다음과 같다.
ㆍ 베이즈 : 베이즈 정리(Bayes' theorem)를 기반으로, 조건부확률에 따라 어떤 클래스에 속할지 매핑한다.
ㆍ 나이브 : 예측하려는 특징이 상호 독립적이라는 가정 하에 확률 계산을 단순화한다.
2.1. 예제를 통한 베이즈 정리 학습
두 사건(Event) A와 B가 있다고 하자.
베이즈 정리에서 P(A|B)는 B가 참일 때 A가 발생할 확률로 위 식으로 표현한다.
같은 맥락에서 P(B|A)는 A가 참일 때 B가 발생할 확률을 뜻하고, P(x)는 x가 발생할 확률을 말한다.
예시 1)
두 개의 동전이 있다. 이를 각각 동전 O와 T라고 한다.
동전 u는 앞면이 나올 확률이 90%, 뒷면이 나올 확률이 10%이다.
동전 f는 앞면이 나올 확률이 50%, 뒷면이 나올 확률이 50%이다.
그렇다면 무작위로 동전 하나를 던져서 앞면이 나왔다고 할 때, 이 동전이 첫 번째 동전일 확률을 얼마일까?
첫 번째 동전을 뽑는 사건을 U, 두 번째 동전을 뽑는 사건을 F, 동전의 앞면이 나오는 사건을 H라고 해보자.
그렇다면 앞면이 나왔을 때 첫 번째 동전을 뽑았을 확률은 P(U|H)이다.
이는 바꾸면 P(U|H) = P(H|U) * P(U) / P(H)이다.
P(H|U)는 첫 번째 동전이 앞면이 나올 확률이므로 90%, P(U)는 동전이 2개이므로 50%이다.
동전의 앞면이 나오는 사건 P(H)는 U와 F 모두와 연관된다.
첫 번째 동전을 뽑고 앞면이 나올 확률에 두 번째 동전을 뽑고 앞면이 나올 확률을 더해주면 된다.
이는 수식으로 곧 P(H) = {P(H|U) * P(U)} + {P(H|F) * P(F)}다.
각 확률을 식에 대입한다면 해당 문제에 대한 정답은 0.64로 64%이다.
예시 2)
1만 명의 사람들이 암 선별 검사를 했고, 결과가 위의 표와 같다고 가정하자.
암 환자들 중 20명과 정상인 중 900명이 잘못 진단된 것을 확인할 수 있다.
이때 어떤 사람의 검진 결과가 양성이면 실제로 암에 걸렸을 확률은 얼마일까?
암에 걸린 사건을 C, 검사 결과 양성인 사건을 Pos라고 해보자.
P(Pos|C) = 80 / 100 = 0.8, P(C) = 100 / 10000 = 0.01, P(Pos) = 980 / 10000 = 0.098
우리가 원하는 결과는 P(C|Pos)이고 이를 전개하면 P(Pos|C) * P(C) / P(Pos)이므로
0.8 * 0.01 / 0.098 = 0.0816...로 약 8.16%이다.
예시 3)
공장의 기계 A, B, C는 각각 전구 생산량이 35%, 20%, 45%가 된다.
각 기계에서 생산된 불량 전구의 비율은 각각 1.5%, 1%, 2%이다.
이 공장에서 생산된 전구에 결함이 있는 사건을 D라고 할 때, 해당 전구가 각 기계에서 제조되었을 확률은 얼마일까?
이를 식으로 정리하면 다음과 같다
2.2. 나이브 베이즈 작동 원리
n개의 특징 x1, x2, ...xn과 데이터 샘플 x, 그리고 K개의 클래스 y1, y2, ..., yk가 있다고 하자.
나이브 베이즈의 목표는 x가 K에 속할 확률 P(yk|x)를 결정하는 것이다.
└ 다르게 표현하면 P(yk|x1, x2, ..., xn)이다.
x와 x1, x2, ..., xn은 동일하다. x는 각각의 특징값이 존재할 때의 결합 사건(Joint Event)을 말한다.
yk는 샘플이 클래스 k에 속하는 사건이다. 이때 k는 1, 2, ..., K의 범위를 갖는다.
P(yk)는 사전 확률(prior)이라고 한다. 관찰을 통한 추가적인 지식이 없을 때의 클래스 분포 확률을 나타낸다.
P(yk|x)는 사후 확률(posterior)이라고 한다. 관찰을 통한 추가 지식이 있을 때의 확률이다.
P(x|yk)는 우도(likelihood)라고 한다. 샘플 x가 클래스 yk에 속할 때 n개 특징에 대한 결합 분포이다.
└ 특징 수가 증가하면 우도를 계산하기 어려운데 나이브 베이즈에서는 특징의 독립성 가정 덕에 계산이 용이하다.
└ n개 특징의 결합 조건부 분포를 개별 특징 조건부 분포의 곱으로 표현 가능하다는 말과 동일하다.
└ 특징의 독립성 가정 : Independence Assumption, 결합 조건부 분포 : Joint Conditional Distribution
P(x)는 증거(evidence)라고 한다. 특징의 전체적인 분포를 나타내고 특정 클래스에 한정되지 않는 정규화 상수이다.
4명의 관객이 세 편의 영화희 호불호 여부, 추천 영화 호불호 여부를 표로 그렸다.
이를 바탕으로 다섯 번째 관객이 추천 영화를 좋아할 가능성이 얼마일까? 계산해보는 것이다.
우선 사전 확률 P(Y) = 3/4, P(N) = 1/4이 된다.
세 편의 영화를 좋아하거나 싫어할 확률을 각각 f1, f2, f3라고 한다.
다섯 번째 관객의 호불호가 x = (1, 1, 0)일 때, 사후 확률 P(Y|x)를 계산하려면 우도를 먼저 계산해야 한다.
└ P(f1 = 1|Y), P(f2 = 1|Y), P(f3 = 0|Y), P(f1 = 1|N), P(f2 = 1|N), P(f3 = 0|N)을 구해야 한다.
위에 표에서 P(f1 = 1|N)에 해당하는 데이터는 없으므로 0이 된다.
일반적으로 0 값을 갖는 우도를 곱하는 걸 방지하기 위해서 각 특징 초깃값을 1로 할당한다.
이런 방법을 라플라스 평활(Laplace Smoothing)이라고 한다.
P(f1 = 1|Y)를 살펴보자.
Y 클래스가 있을 때, m1을 좋아하는 평가가 1개이고(ID = 4번째 사람), 여기에 +1 평활을 더한다.
Y 클래스에 해당하는 데이터 포인트 3개(ID = 1, 3, 4)와 2개(Y/N)의 +1 평활을 더한다.
P(f1 = 1|N)을 살펴보자.
N 클래스가 있을 때, m1을 좋아하는 평가가 0개이고, 여기에 +1 평활을 더한다.
N 클래스에 해당하는 데이터 포인트 1개(ID = 2)와 2개(Y/N)의 +1 평활을 더한다.
이런 식으로 6개의 우도를 모두 구해준다.
이제 사후 확률 비율은 위의 첫 번째 식으로 계산할 수 있다.
이때 x라는 상황에서 Y이거나 N일 확률은 1이다.
고로 P(Y|x)는 1458 / (125 + 1458) * 100 = 약 92.1%가 된다.
3. 나이브 베이즈를 이용한 영화 추천기 구축
영화 등급 데이터셋(moving rating dataset)을 사용한다.
시연을 위해 작은 데이터셋인 ml-lm.zip을 사용한다.
└ 6040명의 사용자가 약 3900편의 영화에 대해 평가한 1~5까지의 평점 1백만 개 데이터이다.
└ ml-lm.zip은 아래 4개의 파일이 존재한다.
ㆍ movies.dat : 영화 정보는 MovieID::Title::Genres 형식으로 저장
ㆍ ratings.dat : 사용자가 평가한 영화 등급이 UserID::MovieID::Rating::Timestamp 형식으로 저장
ㆍ users.dat : 사용자 정보가 UserID::Gender::Age::Occupation::Zip_code 형태로 저장
ㆍ README
본 코드에서는 분류 정확도(Classification Accuracy)로 모델의 성능을 평가한다.
분류 정확도는 71.6%로, 나이브 베이즈 분류기가 약 72%의 관객에게 올바르게 영화를 추천한다는 의미이다.
4. 분류 성능 평가
정확도(Accuracy) 외에도 클래스 불균형(Class Imbalance)를 피하고자 사용 가능한 측정 지표들이 존재한다.
ㆍ 혼동 행렬
ㆍ 정밀도
ㆍ 재현율
ㆍ F1 점수
ㆍ 곡선 아래 면적
혼동 행렬(Confusion Matrix)
테스트 사례에 대한 예측값과 참값을 분할표(contingency table)로 나타낸 것이다.
사이킷런의 confusion_matrix 함수를 통해 나이브 베이즈의 혼동 행렬을 계산하면 위와 같다.
(참 비율 / 전체 비율)을 계산하면 71.6%로 동일함을 알 수 있다.
정밀도(Precision)
참인 양성 사례의 비율로 TP / (TP + F'P')로 측정한다.
위의 경우에는 431 / (431 + 47) = 0.90에 해당한다.
재현율(Recall)
올바르게 식별한 참양성의 비율을 측정하는데, 이 비율은 TP / (TP + FN)이다.
위의 경우에는 431 / (431 + 148) = 0.74에 해당한다.
// 참양성률(true positive rate)라고도 한다.
F1 점수(F1 Score)
정밀도와 재현율의 조화 평균(harmonic mean)으로 F1 = 2 * (정밀도 * 재현율) / (정밀도 + 재현율)이다.
위의 경우에는 F1 = 2 * (0.90 * 0.74) / (0.90 + 0.74) = 0.81에 해당한다.
F1 점수는 정밀도나 재현율 한 가지만 사용하는 것보다 나은 경우가 많다.
from sklearn.metrics import precision_score, recall_score, f1_score
from sklrean.metrics import classification_report
사이킷런에서 함수를 호출하여 위의 함수들을 측정할 수 있다.
혹은 각각 호출하지 않고 classification_report 함수를 호출하여 효율적으로 계산할 수도 있다.
분류 보고서(classification_report)는 각 클래스에 대한 분류기의 결과를 전체적으로 보여준다.
└ 불균형 분류(Imblanced Classification)에서는 유용하다.
└ 불균형 분류 : 모든 샘플을 다수 클래스로 분류하는 것만으로 높은 정확도를 얻는 방법
└ 하지만 소수 클래스에 대한 정밀도, 재현율, F1 점수 측정값은 낮게 나올 수 있다.
정밀도, 재현율, F1 점수는 '다중 클래스 분류'에도 적용할 수 있다.
└ 이 경우 관심 있는 클래스를 양성, 그 밖의 다른 클래스는 음성으로 처리한다.
곡선 아래 면적(AUC; Area Under the Curve)
상황에 따라 클래스와 모델의 F1 점수가 차이가 나는 경우, 어떤 모델이 더 잘 작동하는지 판단하는 방법이다.
이는 통합 측정 방법으로 수신기 작동 특성(ROC; Reveiver Operation Characteristic) 중 하나이다.
ROC 곡선은 0에서 1까지 다양한 확률 임곗값에 대해 참양성률과 거짓양성률을 그린 그래프이다.
└ 참양성률 : 재현율과 동일하다.
└ 거짓양성률 : 양성으로 잘못 판별한 음성의 비율이다.
그래프에서 점선은 무작위 추측을 나타내는 기준선, 실선은 모델의 ROC 곡선이다.
거짓양성률에 따라 참양성률이 선형으로 증가하고 AUC는 0.5이다.
5. 교차 검증으로 모델 조정
K-폴드 교차 검증 다이어그램
모델이 실제로 어떻게 수행될지 평가하기 위해 사용하는 기술이다.
1. 원본 데이터를 무작위 K개의 같은 크기 부분집합으로 나눈다.
2. K개의 부분집합 중 하나의 부분집합을 순차적으로 테스트 집합으로 사용한다.
3. 시행할 때마다 나머지 K-1개의 부분집합은 모델의 훈련셋으로 사용한다.
4. 마지막으로 모든 K 시행에 대한 평균 성능을 계산해 전체 결과를 구한다.
k값은 일반적으로 3, 5, 10으로 설정한다. 훈련 데이터셋 크기가 작으면 큰 값이 좋다
alpha : 평활화 인자(smoothing factor)로, 각 특징의 초깃값
fit_prior : 훈련 데이터로 학습한 사전 확률의 사용 여부
각 폴드에 대해서 훈련과 예측 과정을 반복한 다음 AUC 결과를 기록한다.
결과 중 가장 높은 값으로 재학습한 뒤 AUC를 계산한다.
일반적으로 교차 검증을 통해 모델의 하이퍼 매개변수를 조정하는 것은 학습 성능을 높이고 과적합을 줄여준다.
'학교 공부 > 인공지능 응용' 카테고리의 다른 글
07 지능 에이전트 (0) | 2023.05.31 |
---|---|
06 CNN과 컴퓨터 비전 (0) | 2023.05.30 |
05 딥러닝과 텐서플로 (0) | 2023.04.12 |
04 신경망 기초 (0) | 2023.04.11 |
03 기계 학습과 인식 (0) | 2023.04.08 |