Hands-On Machine Learning

[핸즈온머신러닝] CH3. 분류 (Classification)

KoVi Robotics 2022. 11. 27. 19:40

last update. 2022/11/27

 

* 핸즈온 머신러닝에 나온 목차대로 진행하지 않았습니다. 분류의 종류에 대해 설명한 다음 성능 측정을 설명합니다.


목차

1. 분류란?

2. 분류의 종류

    2.1 이진 분류

    2.2 다중 분류

    2.3 다중 레이블 분류

    2.4 다중 출력 분류

3. 성능 측정

    3.1 교차 검증

    3.2 오차 행렬

    3.3 정확도

    3.4 정밀도

    3.5 재현율

    3.6 정밀도/재현율 트레이드 오프

    3.7 ROC 곡선

    3.8 F1 스코어

4. 에러 분석


1. 분류란?

 

[그림 1] Binary Classification

  분류는 대표적인 지도학습의 예시로 기존에 존재하는 데이터를 사용해 모델을 학습시킨 후, 새롭게 관측된 데이터를 학습된 모델을 이용해 어느 클래스에 속하는지 예측하는 것을 의미한다. 

 

 

2. 분류의 종류

 

[그림 2] 분류의 종류

 

분류의 종류에는 크게 4가지가 있다.

  • 이진 분류
  • 다중 분류
  • 다중 레이블 분류
  • 다중 출력 분류

 

핸즈온 머신러닝 책에 나온 MNIST 데이터를 이용하여 분류를 설명해 보겠다.

 

2.1 이진 분류 (binary classification)

5 or not?

이진 분류는 '5이냐? 5가 아니냐?'와 같이 두 가지 클래스로 구분하는 분류이다.

 

2.2 다중 분류 (multiclass classification)

1 or 2 or 3 or 4 or 5 or ... ?

이진 분류가 두 개의 클래스를 구별하는 것이라면, 다중 분류는 둘 이상의 클래스를 구별할 수 있는 분류이다.

 

2.3 다중 레이블 분류 (multi-label classification)

over 7?
even or odd?

이진 분류와 다중 분류는 각 샘플이 하나의 클래스에만 할당되었었다. 즉 하나의 결과로 분류할 수 있었던 것이다.

하지만 다중 레이블 분류는 둘 이상의 클래스로 분류할 수 있다.

 

2.4 다중 출력 분류 (multioutput classification)

다중 출력 다중 클래스 분류 (multioutput-multiclass classification)라고도 부른다.

 

ask to each pixel

 

다중 출력 분류는 다중 레이블 분류와는 다르게 클래스가 가질 수 있는 값의 집합이 둘 이상인 것을 의미한다.

즉 다중 레이블 분류에서는 7이냐? 7이 아니냐? 와 같이 출력 가능한 결과의 집합이 2개인 반면

다중 출력 분류에서는 하나의 레이블이 가령 픽셀 값 0~255 사이의 다중 값을 가질 수 있다는 것이다.

 

 

종류 질의 결과
이진 분류 1개
(5 or not?)
1개
(It's 5!)
다중 분류 1개
(1 or 2 or 3 or... ?)
1개
(It's 5!)
다중 레이블 분류 2개 이상
(over 7?
even or odd?)
2개 이상
(It's over 7 and even!)
다중 출력 분류 2개 이상
(pixel 1's value?
pixel 2's value?
...)
2개 이상
(pixel 1 is 255 and
pixel 2 is 100 and
...)

 

 

다른 분류 사이는 직관적이라 이해가 잘 되겠지만, 아래는 스터디하는 도중 각분류의 차이점에 대해 헷갈리는 부분이 있어서 정리하였다.

다중 분류와 다중 출력 분류

다중 분류와 다중 출력 분류는 결과로 가질 수 있는 값이 2개 이상이다.
이게 무슨 말이냐 하면 다중 분류의 질문을 보면 0이냐? 1이냐? 2이냐? ... 255이냐?로 가질 수 있는 값이(픽셀을 예로 들면) {0, 1, 2, 3, ... , 255}이다.
다중 출력 분류 또한 위와 같다.
하지만 둘의 다른 점은  다중 분류는 하나의 결과만 분류하는 것이고(픽셀 1의 픽셀 값은?), 다중 출력 분류는 여러 개의 결과에 대해 분류하는 것이다(28*28 사이즈의 사진의 모든 픽셀에 대한 픽셀 값은?).

다중 레이블 분류와 다중 출력 분류

다중 레이블 분류와 다중 출력 분류는 모두 2개 이상의 레이블에 대해 분류할 수 있다. 하지만 레이블이 가질 수 있는 값의 집합의 차이라고 생각하면 이해가 편하다.
즉 다중 레이블 분류는 질문 자체도 7 이상이냐? 아니냐? 이기에 가질 수 있는 집합은 {7 이상, 7 미만}이다.
다중 출력 분류는 질문 자체가 1번 픽셀의 값은 얼마인가?이고 가질 수 있는 집합은 {0, 1, 2, 3, ... , 255}이다.

 

 


 

3. 성능 측정

 

  분류기를 만들어 예측을 한다면, 그 분류기의 성능을 측정하여 얼마나 좋은 분류기인지 알아야 한다. 성능 측정을 통해 분류기를 평가하고 현재 분류기의 성능이 어떠한지 판단합니다. 그런 다음 상황에 맞는 분류기로 다시 모델링하거나 성능을 끌어올릴 방법을 찾습니다. 상황에 맞는 분류기를 선택하려면 어떤 상황에서 어떤 평가지표를 이용하여 성능을 측정해야 하는지 알아야 한다. 이번에는 그 성능 측정에 대해 자세히 보도록 하겠다.

 

3.1 교차 검증 (cross validation)

[그림 3] K-Fold 교차 검증, k=5일 때의 설명

  우선 성능 측정을 하기 전에 교차 검증에 대해서 알아보자. 교차 검증의 사전적 의미는 하나의 문제에 대해 여러 가지 시각, 서로 다른 시각으로 검증하는 것이다. 머신러닝에서의 교차 검증은 가지고 있는 데이터셋을 하나의 train 데이터셋, 하나의 test 데이터셋으로 고정하여 평가지표를 적용하는 것이 아니라, 모든 데이터셋을 교차해가며 train과 test로 데이터셋을 나누어 평가지표를 적용하는 것을 의미한다.

 

  고정된 train, test 데이터셋을 이용하여 모델을 만들다 보면, 모델이 test 데이터셋에 과적합되는 결과가 나오게 된다. 고정된 test 데이터셋에만 잘 동작하는 모델을 만들기 때문이다. 이런 단점을 보완하기 위해 모든 데이터셋을 교차하며 모델을 생성한 후 검증하기 때문에 과적합된 모델을 만들지 않고 좀 더 일반화된 모델을 만들 수 있다.

 

이런 교차 검증의 단점이라면 시간이 오래 걸린다는 것이다.

 

 

3.2 오차 행렬 (confusion matrix)

 

* confusion : 혼동, 오차

[그림 4] 오차행렬과 다양한 평가지표

 

  이렇듯 교차 검증을 통해 과적합되는 문제를 해결하고 나면, 오차 행렬을 이용해 분류기의 성능을 측정할 수 있다. 분류기의 성능을 측정하는 지표는 정확도, 정밀도, 재현율 등이 있는데 이것을 확인하기 위해서 오차행렬을 이용한다. 오차 행렬은 분류 모델이 예측한 것에 대해 얼마나 많은 오차가 있는지 표로 나타낸 것이다.

 

위 표는 이진 분류에 대한 오차 행렬이다. 꼭 이진 분류에만 오차 행렬을 사용할 수 있는 것은 아니다.

 

 

3.3 정확도 (accuracy)

 

[그림 5] 정확도 수식

 

정확도는 모델이 실제로 참인 것과 거짓인 것을 얼마나 잘 예측하였는지를 나타내는 지표이다.

 

단점

  정확도는 불균형한 데이터셋, 즉 어떤 클래스가 월등히 많을 때는 사용할 수 없는 지표이다. 만약 100명 중 99명이 암에 걸리지 않았고 1명만 암에 걸렸다고 하자. 이런 데이터에서 모델이 90명이 암에 걸리지 않았고 10명이 암에 걸렸다고 예측하였다. 그렇다면 이 모델의 정확도는 얼마가 될까? 암에 걸리지 않은 90명과 암에 걸린 1명에 대해서 정확하게 예측하였으니 91명에 대해 정확하게 예측한 것이다. 여기서 정확도는 91%가 나온다.

  이런 상황에서 높은 정확도를 가졌다해서 좋은 분류 모델이라고 평가할 수 있을까? 절대 아니다. 이렇듯 정확도의 함정이 있기 때문에 정확도와 더불어 상황에 따라 다른 평가지표도 살펴보아야 한다.

 

 

3.4 정밀도 (precision)

 

[그림 6] 정밀도 수식

 

  정밀도는 모델이 참으로 예측한 것 중을 기준으로 정확도를 측정합니다. 즉 모델이 참으로 예측한 것 중 진짜 참인 것의 비율을 나타냅니다. 정밀도는 모델이 예측한 참에 대해서만 관심을 가지는 지표이며, 거짓은 생각하지 않고 참으로 예측한 것이 진짜 참일 비율을 나타내는 지표이다.

 

 

 

 

3.5 재현율 (recall)

 

[그림 7] 재현율 수식

 

정밀도는 모델 예측의 참에 초점을 맞추었다. 하지만 재현율은 모델 예측의 참에 초점을 맞추는 것이 아니라, 실제 참인 것을 모델이 얼마나 잘 예측했지를 나타내는 지표이다.

 

 

 

사실 이런 정확도, 정밀도, 재현율 등의 평가지표는 말로 길게 풀어서 설명한 것을 보아 이해하는 것보다는 실제 상황에 맞추어 자신이 생각을 해보는 것이 중요하다고 생각한다(말로는 이해가 잘 안 되기 때문에). 실제 상황에서 어떤 평가지표를 사용해야 할지 각각의 평가지표를 대입하여 생각해본 다음 가장 적합하다고 생각하는 것을 선택해야 한다.

 

 

 

3.6 정밀도/재현율 트레이드오프

 

[그림 8] 정밀도/재현율 트레이드 오프

정밀도/재현율 트레이드오프는 둘 사이의 관계가 반비례라는 것을 의미한다. 정밀도가 높아지면 재현율은 낮아지고, 정밀도가 낮아지면 재현율은 높아지는 관계인 것이다.

 

만약 모델의 정밀도 혹은 재현율을 원하는 목표에 도달시키고 싶으면 임계값을 이용하면 된다. 분류기는 분류를 진행할 때 결정 함수를 통해 샘플에 대한 점수를 측정하게 되는데, 이 점수가 정해진 임계값을 넘으면 양성 클래스로 할당하게 된다.

 

3.7 ROC 곡선 (receiver operating characteristic curve)

 

 

[그림 9] ROC 곡선에 사용되는 평가지표

ROC 곡선은 민감도와 1-특이도로 그려지는 곡선이다. 민감도는 위에서 봤던 재현율과 같은 것이고, 특이도는 실제 거짓인 값을 모델이 정확하게 예측한 비율을 의미한다. ROC 곡선에서 x축은 1-특이도이고, y축은 민감도(재현율)이다. 

 

 

ROC 곡선은 좌측 상단에 가까운 곡선이 나올수록 성능이 좋은 모델이라고 할 수 있으며, 보통 ROC 곡선의 아래 면적인 AUC(area under the curve)를 이용해 분류기의 성능을 측정한다.

 

AUC 평가
0.9 이상 Excellent
0.8 ~ 0.9 Good
0.7 ~ 0.8 Fair
0.7 이하 Poor

 

 

3.8 F1 스코어

 

[그림 10] F1 스코어

 

F1 스코어는 정밀도와 재현율의 조화 평균이다. 정밀도와 재현율을 조합하여 하나의 통계치를 얻는 것이다. 조화 평균을 쓰는 이유는 정밀도와 재현율 중 더 작은 값의 영향을 더 많이 받게 하기 위해서이다. F1 스코어는 0.0 ~ 1.0 사이의 값을 가진다.

F1 스코어는 불균형한 데이터에 대한 평가지표로 사용하기 적합하다.

 

만약 정밀도가 0.01, 재현율이 1이 있다고 하자. 매우 비정상적인 모델이라고 할 수 있다.

이것을 일반적인 평균으로 구하면 다음과 같다.

 

0.01 + 1 / 2 = 0.505

 

조화 평균으로 구하면 다음과 같다.

2* (1 * 0.01) / (1 + 0.01) = 0.019

 

이와 같이 일반적인 평균으로 구한다면 F1 스코어가 높게 나와 제대로 된 평가지표로 사용할 수 없다. 하지만 조화 평균으로 구한다면 비정상적인 정밀도와 재현율을 가진 만큼 낮은 값이 나오게 된다.

 


4. 에러 분석

 

  에러 분석은 모델 디버깅이라고도 한다. 데이터 전처리를 하고, 모델들 중 가장 괜찮은 모델을 찾고, 모델의 하이퍼 파라미터를 세밀하게 튜닝하여 가능성이 가장 높은 모델을 찾았다고 가정해보자. 이후에 해야 할 것이 이 에러 분석이다. 에러 분석의 목적은 모델의 성능을 궁극적으로 향상하는 것이다.

 

먼저 분류기에 대해 에러 분석을 하기 위해 오차행렬을 살펴봐야한다. cross_val_predict() 함수를 이용해 예측을 만들고 오차행렬을 만들어 준다.

만들어진 오차행렬을 한눈에 보기 쉽게 시각화를 시켜준다. 그러면 왼쪽 위에서 오른쪽 아래로 대각선이 그어지는 것을 볼 수 있다. 이것의 의미는 모델이 실제값의 예측을 비교적 정확하게 수행하고 있다는 것을 보여준다. 예를 들어 첫 번째 열을 보자. 실제 0을 모델이 어떻게 예측했는지를 볼 수 있다. 실제 0을 0으로 5577개 예측하였고, 0을 1로는 0개, 0을 2로는 27개로 예측하고 있다.

아래는 오차의 절대 개수로 시각화한 것이 아니라, 실제값의 이미지 개수에 오차값을 나눈 것이다. 대각선은 0의 값을 가지도록 했다. 이를 살펴보면 모델이 8에 대한 예측을 제대로 수행하고 있지 못하는 것을 확인할 수 있다. 또한 2, 3, 5와 8이 많이 혼동되고 있음을 알 수 있다.

 

이렇듯 모델의 예측을 통해 에러분석을 하게 되면 분류기 성능 향상에 대한 통찰을 얻을 수 있다. 모델이 2, 3, 5가 8과 많이 혼동되는 것을 봤으니 이것을 모델이 더욱 잘 구별할 수 있도록 데이터셋을 더 많이 준비할 수 있을 것이다. 또한 다른 특징을 모델에 적용시켜 혼동되는 것을 막을 수도 있을 것이다.

 

 

 


스터디 때 사용한 자료 파일

 

HML_ch3_classification.ipynb
0.15MB


Kovi는 SSDC(Samsung Software Developer Community)를 기반으로 만들어진 커뮤니티입니다. ML, DL, Computer Vision, Robotics에 관심 있고 열정 있는 사람들이 모여 함께 활동 중입니다.

 

Kovi Instagram : https://www.instagram.com/kovi.or.kr/

Kovi SSDC : https://software.devcommunities.net/community/communityDetail/98

 

이 포스팅은 Kovi 커뮤니티 스터디의 일환으로 작성되었습니다.

posted by. Daevi


Reference

[그림 1]

https://www.researchgate.net/figure/This-illustration-present-a-binary-classification-that-is-performed-on-two-features_fig5_285653348

[그림 3]

https://towardsdatascience.com/cross-validation-k-fold-vs-monte-carlo-e54df2fc179b

[그림 4]

https://manisha-sirsat.blogspot.com/2019/04/confusion-matrix.html

[그림 8]

핸즈온 머신러닝