먼저 Confusion Matrix(혼동행렬)란, 이진분류(Binary Classification) 나 다중분류(Multiclass Classification)에서 어떤 모델의 분류가 잘 되었는지 평가하기 위해 모델의 결과를 시각화한 표 또는 행렬이다.
Binary Classification 이진 분류란,
1 또는 0 = Positive 또는 Negative 둘 중에 하나로 분류되는 경우를 이진 분류라고 한다.
쉽게 예를 들면, 어떤 사진을 보고 이 사진이 강아지냐 고양이냐를 판단하는 것을 이진 분류라고한다.
이진 분류의 Confusion Matrix는 실제값=정답값=Actual과 예측값=Predicted를 행 또는 열로 가지고, 일치하는 개수를 행렬의 원소로 입력한 모습이 된다. 예를 들어 강아지냐 고양이냐를 판단하는 문제에서 주어진 여러 이미지 중에서 강아지를 잘 맞추는지 보고싶다. 그러면 강아지는 Positive class라고 할 수 있다. 고양이로 분류하면 Negative class로 분류한 것과 동치이다.
- 강아지를 강아지라고 예측했다. 맞췄으니 True이고, 강아지로 예측했기 때문에 Positive = TP : True Positive이다.
- 강아지를 고양이라고 예측했다. 틀렸기때문에 False이고, 고양이로 예측했기 때문에 Negative = FN : False Negative이다.
- 고양이를 강아지라고 예측했다. 틀렸기때문에 False이고, 강아지로 예측했기 때문에 Positive = FP : False Positive이다.
- 고양이를 고양이라고 예측했다. 맞췄으니 True이고, 고양이로 예측했기 때문에 Negative = TN : True Negative이다.
Precision(정밀도)는 정답이라고 예측한 것들 중에서 진짜 맞춘 것들에 중점을 둔 것이다.
따라서 TP / (TP+FP) 로 계산한다.
Recall(재현도)는 실제 정답에 대해서 얼마나 잘 예측했는가를 중점둔다.
따라서 TP / (TP+FN) 로 계산한다.
두 지표는 일반적으로 trade-off 현상이 일어난다. 즉, 정밀도가 올라가면 재현도가 떨어지고, 재현도가 올라가면 정밀도가 떨어지는 현상이 벌어지는데, 이 때문에 상황에 따라 중요성이 다르다. 예를 들어서, 의학분야에서 암을 판단하는 이진 분류일 경우, 실제 암 환자를 발견하는 것이 더 중요하기 때문에 recall값을 더 중요시하고, 추천시스템에서 실제 사용자가 좋아하는 컨텐츠를 분류하는 경우, 여러 추천컨텐츠 중에서 얼마나 사용자가 좋아하는 컨텐츠가 많은지가 중요하기 때문에 precision값을 더 중요시하게 된다.
Multiclass Classification 다중 분류란,
어떤 사진을 보고 강아지, 고양이, 닭, 코끼리,,,등등 여러 객체 중 무엇인지를 판단하는 것이다.
이진 분류 방식과 동일하게 Confusion Matrix를 구성하면되고, 평가지표 계산은 복잡하게 생각될 수 있지만 단순하게 생각해서 Class별로 precision과 recall을 계산해준다! 라고만 기억하면 쉽게 외워질 것 같다.
평가지표로 Accuracy(정확도)를 사용해줄 수도 있다.
하지만 강아지사진이 90장, 고양이 사진이 10장과 같이 데이터 불균형이 있는 경우에는 모델 정확도의 신뢰도가 떨어진다.
그래서 F1-score(F1-measure)라는 것을 사용한다.
예측값들 중 정답과 실제값들 중 정답를 모두 고려해 주는 것으로 불균형을 해소해주고, 계산은 precision과 recall의 조화평균으로 계산된다. 두 지표가 모두 높으면 1에 가까워지고, 두 지표가 모두 낮으면 0에 가까워지는 특성을 가진다.
** 해당 metrics는 직접 계산하지 않고, sklearn.metrics.confusion_matrix 함수를 활용하여 간단하게 계산할 수 있다.
본인이 측정하고자 하는 모델이 어떤 관점에서 중요한지를 판단하여, 적합한 metrics를 사용하는 것이 중요하겠다.
'AI > Fundamental' 카테고리의 다른 글
정규화란? Normalization, Regularization 정규화 종류에 대해서 알아보자. (0) | 2023.09.13 |
---|---|
LSTM (Long Short-Term Memory) 신경망 모델 공부하기 (0) | 2023.08.28 |
Activation Function 활성화 함수 (Sigmoid, Softmax, tanh, ReLU) 사용 이유, 그래프, 성질 (0) | 2023.08.24 |
RNN(Recurrent Neural Network) 순환신경망 공부하기 (2) | 2023.06.14 |
[머신러닝] 학습, 검증, 테스트 데이터 쪼개는 법 : random_split PyTorch), train_test_split(Scikit-learn) (0) | 2022.08.26 |