Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

동삼이의 노트북

MNIST 분류 (5) - 에러 분석 본문

Projects

MNIST 분류 (5) - 에러 분석

동삼이 2020. 11. 23. 19:34

이전 포스팅에서 언급한 것 처럼, 최적의 모델을 찾았다고 가정한 후, 그 모델의 성능 향상을 위해 에러 분석을 진행하고자 한다. 우선 cross_val_predict()를 사용하여 오차행렬을 살펴볼 수 있다.

 

클래스가 10개가 있기 때문에 10 * 10 오차행렬이 생성된다. 이를 보다 편하게 보기 위해 matshow()함수를 이용하여 시각화한다.

 

위 오차행렬 시각화를 보면, 가운데 대각선 타일만 밝은 색으로 나타나는 것을 볼 수 있다. 이는 배열에서 가장 큰 값은 흰색, 작은 값은 검은색으로 정규화되어 그려지기 때문에 0인 샘플(행)을 0(열)으로 분류한 샘플의 갯수가 가장 많고, 1인 샘플을 1로 분류한 샘플의 갯수가 가장많다는 것을 알 수 있다. (2~9도 마찬가지) 하지만 대각선 타일의 색깔이 전부 흰색으로 같은 것이 아니고 5의 경우 보다 어두운 색인 것을 알 수 있다. 이는 데이터셋에 숫자 5의 데이터가 적거나 분류기가 숫자 5를 다른 숫자만큼 분류하지 못한다는 것을 의미한다. 

 

따라서 우리는 그래프의 에러 부분에 초점을 맞춰보려한다. 전체적인 갯수가 아닌, 오차 행렬의 각 값에 대응되는 클래스의 이미지 개수로 나누어 에러 비율을 비교해보자.

 

에러 비율을 시각화 해본 결과 클래스 8의 열이 상당히 밝은 것을 알 수 있다. 즉 많은 이미지가 8로 잘못 분류되었다는 것을 의미한다. 하지만 클래스8의 행은 그다지 밝아보이지 않는다. 그말은 즉 실제 8이 적절히 8로 분류되었다는 것을 의미한다. 이렇듯 오차행렬은 반드시 대칭인 것은 아니다. 3과 5가 서로 많이 혼동되고 있다는 것 또한 알 수 있다. 

 

위 오차행렬 시각화를 통해 분류기의 성능 향상 방안에 대한 인사이트를 얻을 수 있다. 이 그래프의 경우 8로 잘못 분류되는 것을 줄이도록 8처럼 보이는 (실제 8은 아닌) 숫자의 훈련데이터를 더 많이 모아서 실제 8과 구분하도록 분류기를 학습시킬 수 있다. 혹은 분류기에 도움이 될 만한 특성을 더 찾아 볼 수 있다.(예를 들어 숫자의 동심원 수를 세는 알고리즘)

 

또한 3과 5의 혼동 분류를 파악하기 위해 3과 5의 샘플을 그려보자.

왼쪽에 두 블록은 3으로 분류된 이미지이고 오른쪽 두 블럭은 5로 분류된 이미지이다. 특정 샘플은 사람이 보고 분류하기도 힘들 정도로 ㅈ잘못쓰인 숫자도 있다. 하지만 대부분은 인지할 수 있는 수준이기 때문에 분류기의 에러인 것을 확인할 수 있다. 원인은 선형 모델인 SGDClassifier를 사용했기 때문이라고 볼 수 있다. 선형 분류기는 클래스마다 픽셀에 가중치를 할당하고 새로운 이미지에 대해 단순히 픽셀 강도의 가중치 합을 클래스의 점수로 계산한다. 따라서 3과 5는 몇개의 픽셀만 다르기 때문에 모델이 쉽게 혼동하게 된다. 3과 5는 비슷하게 생긴 이미지이기 때문에 이미지의 위치나 회전 방향에 민감한 선형 분류기는 쉽게 혼동할 수 있다. 이를 해결하기 위해서는 이미지를 중앙에 위치시키고 회전되어 있지 않도록 전처리 하는 것이 필요하다. 

Comments