본문 바로가기
AI/ML

[ML] 분류 (Classification)

by hyeok1235 2024. 8. 16.

분류(Classification)은 지도학습(Supervised Learning)의 대표적인 유형 중 하나로 클래스를 예측한다.

(다른 유형은 값을 예측하는 회귀, Regression이다)

 

분류에는 여러 유형이 존재한다.

- Binary Classifier : 가장 단순한 유형으로, 특정 클래스에 속하는지 아닌지만을 판단한다. (숫자 5인지 아닌지)

- Multi-Class : 2개 이상의 클래스가 주어질 때, 어떤 클래스에 속하는지를 판단한다. (0~9 중 어떤 숫자인지)

- Multi-Label : 하나의 요소가 여러 개의 라벨을 가지는 상황일 때 사용된다. (여러 인물이 있는 사진이 주어졌을 때, 어떤 인물이 나와있는지 각 라벨마다 True/False 값을 가짐)

- Multi-Ouput : Multi-Label의 더 일반화된 유형으로, 여러 개의 라벨을 가지면서 각 라벨이 여러 개의 클래스를 가질 때 사용된다. (하나의 사진에는 라벨의 역할을 하는 여러 개의 픽셀들이 있고, 각 픽셀은 클래스의 역할을 하는 0~255 사이의 값을 가진다)

 

◆ 성능 평가 기준

1) 정확도

가장 단순한 방은 cross validation을 통해 정확도(accuracy)를 계산하는 것이다. k-fold라면 k개의 데이터셋으로 나눠서 각 fold마다 정확도를 계산하면 된다. 하지만 정확도를 바탕으로 평가하는 것은 무의미하다.

skewed dataset인 경우: 만약 숫자 5인지 아닌지를 판단하고자 한다면, 5가 아닌 경우가 90%이기 때문에 만약 모델이 무조건 5가 아니라는 결정을 하게 되어도 정확도는 90%나 된다

 

2) Confusion Matrix

이런 현상을 해결하기 위해서 confusion matrix를 사용한다. 단순한 정확도보다 더 자세한 정보를 얻을 수 있다.

>>> from sklearn.metrics import confusion_matrix
>>> cm = confusion_matrix(y_train_5, y_train_pred)
>>> cm
array([[53892,   687],
       [ 1891,  3530]])

 

True와 False라는 클래스로 나눠질 때, 실제 클래스와 예측된 클래스를 바탕으로 2x2 표를 만드는 것이다. 가장 이상적인 모습으 True로 예측했지만 False인 경우(나, B로 예측했지만 A인 경우가 하나도 없는 경우이다. 

 

3) Precision & Recall

Confusion Matrix에서 나온 개념이 정밀도(precision)와 재현율(recall)이다.

정밀도는 positive하다고 예측을 한 것들의 정확도를 보는 것이다.

$$precision =  \frac{TP}{TP + FP}$$

 

재현율은 실제로 positive한 것들 중에서 positive로 예측한 것들의 비율이다.  

$$recall = \frac{TP}{TP + FN}$$

 

>>> from sklearn.metrics import precision_score, recall_score
>>> precision_score(y_train_5, y_train_pred)  # == 3530 / (687 + 3530)
0.8370879772350012
>>> recall_score(y_train_5, y_train_pred)  # == 3530 / (1891 + 3530)
0.6511713705958311

 

이 예시에서는 positive하다고 예측한 것들 중에서 실제로 positive한 것들의 비율은 약 83%이고, 전체 positive한 것들 중에서 올바르게 positive하다고 예측한비율은 약 65%이다. 

 

    3-1) F1 Score

precision과 recall 두 개의 값을 함께 보아야 모델에 대해서 판단할 수 있다. 이 두 기준을 묶어 놓은 것이 F1 Score이다. 

\[
F_1 = \frac{2}{\frac{1}{\text{Precision}} + \frac{1}{\text{Recall}}} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}} {\text{Precision} + \text{Recall}} = \frac{2 \cdot \text{TP}}{2 \cdot \text{TP} + \text{FN} + \text{FP}}
\]

실제로 단순히 평균 값을 내보면 F1 Score가 더 높게 나온다. 이는 precision과 recall 둘 다 높아야 점수가 높아지는 것을 반영한다. 

 

    3-2) Precision/Recall Tradeoff

precision과 recall의 특성 상, 서로 상충 관계에 있다. 만약 예측을 엄격하게 한다면 positive하다고 예측한 것들 중에서 실제로 positive한 것들의 비율이 올라가기 때문에 precision은 높아진다. 하지만 positive하다고 예측하는 것들의 비율이 적어지기 때문에 recall은 낮아진다. 예측을 더 널널하게 한다면 반대의 상황이 발생한다. 

 

Precision/Recall Curve

Precision/Recall 곡선을 보면서 원하는 precision이나 recall 값에 해당하게 기준을 설정하면 된다.

 

4) ROC Curve

Receiver Operating Characteristic(ROC) 곡선은 precision/recall 곡선과 유사하다. ROC 곡선은 recall/false positive rate에 해당한다. positive한 경우가 적거나 false negative보다 false positive를 줄이는 것이 더 중요하다면 PR 곡선을 쓰나, 나머지 경우에는 ROC 곡선이 더 유용하다. 

다음 예시에서도 recall과 false positive rate에는 tradeoff가 있다는 것을 보여준다. 

 

 

 

 

 

728x90
반응형

'AI > ML' 카테고리의 다른 글

[ML] 오차/오류의 종류  (0) 2024.09.06
[ML] 경사하강법 (Gradient Descent)  (0) 2024.09.05
[ML] 모델 파인튜닝  (0) 2024.08.14
[ML] 데이터셋 준비  (0) 2024.08.13
[ML] 모델의 평가와 검증 (Test, Evaluation)  (0) 2024.07.26