오뚝이개발자

[핸즈온ML] CH3. 분류 본문

AI/밑바닥딥러닝1

[핸즈온ML] CH3. 분류

땅어 2020. 7. 17. 22:07
728x90
300x250

 

본 글은 밑바닥부터 시작하는 딥러닝 포스팅에 이어 핸즈온 머신러닝 2판(오렐리앙 제롱 지음) 책을 공부한 것을 요약한 것으로 밑바닥 딥러닝 책에 나오지 않는 개념들 위주로 정리한다. 나오지 않는 개념이나 기본적인 개념들을 밑바닥부터 시작하는 딥러닝에 포스팅하였으니 먼저 보고 오기를 추천한다.

 

이진 분류기 훈련


문제가 복잡할 때는 단순화해서 검증을 해보는 것이 유용하다. 예를 들어, MNIST 손글씨 분류 문제에서는 0~9까지 10개의 클래스에 대해 한 번에 검사하기 보단 '5-감지기'와 '5아님-감지기' 두 개의 클래스를 구분할 수 있는 이진 분류기(binary classifier)를 구현해 테스트 해보는 것이다.

 

성능측정


1. 교차 검증을 사용한 정확도 측정(k-fold cross validation)

2. 오차 행렬(confusion matrix)을 사용한 정확도 측정

- 기본적인 아이디어 : 클래스 A의 샘플이 클래스 B로 분류된 횟수를 카운트

  -EX) 분류기가 숫자 5의 이미지를 3으로 잘못 분류한 횟수를 알고 싶다면 오차 행렬의 5행 3열을 보면 된다.

3. 정밀도(precision)와 재현율(recall)

출처 : sumniya 티스토리

- 정밀도 : 양성 예측의 정확도(모델이 True라고 분류한 것 중 실제 True의 비율)

- 재현율 : 분류기가 정확하게 감지한 양성 샘플의 비율(실제 True인 것 중에서 모델이 True라고 예측한 비율)

- 예컨대, 5와 5아님 이진 분류기의 오차행렬에서 첫 번째 행이 '5아님' 이미지에 대한 것이라면 1행이 negative class에 대한 것이고, 2행이 positive class에 대한 것이다.

  - 1행 1열 : '5아님'을 '5아님'으로 분류한 true negative

  - 1행 2열 : '5아님'을 '5'라고 분류한 false positive

  - 2행 1열 : '5'를 '5아님'으로 분류한 false negative

  - 2행 2열 : '5'를 '5'로 분류한 true positive

4. F1 점수(F1 score)

- 정밀도와 재현율의 조화 평균

- 정밀도와 재현율이 비슷한 분류기에선 F1 score가 높다.

  - 하지만 이게 항상 바람직한 것은 X -> 상황에 따라 정밀도가 중요할 수도 있고 재현율이 중요할 수도 있음

  - EX) 어린아이에게 안전한 동영상을 걸러내는 분류기는 재현율은 높으나 정말 나쁜 동영상이 몇 개 노출되는 것보다 좋은 동영상이 많이 제외되더라도(낮은 재현율) 안전한 것들만 노출시키는(높은 정밀도) 것이 좋다.

 

정밀도/재현율 trade-off


- 정밀도와 재현율은 트레이드 오프 관계

- 대부분의 분류기는 결정 함수(decision function)을 사용해 각 샘플의 점수 계산

  - 이 점수가 결정 임계값(decision threshold)보다 크면 샘플을 양성 클래스로 분류, 반대의 경우 음성 클래스로 분류

  - 아래 사진에서 임곗값에 따라 정밀도와 재현율이 달라지는 것을 볼 수 있다. 예컨대, 중앙의 임곗값을 취하면 임곗값 오른쪽에 4개의 진짜 양성(실제 숫자 5)과 하나의 거짓 양성(실제 숫자 6)이 있다. 따라서 정밀도는 4/5=80%지만 실제 숫자 5는 6개고 분류기는 4개만 감지했으므로 재현율은 4/6=67%이다.

출처 : 핸즈온 머신러닝 2판

- 프로젝트에 따라 다르겠지만 일반적으로 적절한 임곗값을 설정하기 위해선 재현율에 대한 정밀도 곡선을 그려서 정밀도가 급격하게 줄어든느 하강점 직전을 정밀도/재현율 트레이드 오프 지점으로 선택하는 것이 좋다.

 

다중 분류기(multiclass classifier)


- 이진 분류와 다르게 둘 이상의 클래스를 구별하는 분류기로 다항 분류기(multinomial classifier)라고도 함

- 이진 분류기를 여러개 사용해 다중 클래스를 분류하는 기법도 많다.

- 예를 들어, 특정 숫자 하나만 구분하는 숫자별 이진 분류기 10개(0~9)를 훈련시켜 클래스가 10개인 숫자 이미지 분류 시스템을 만들 수 있다. 이미지를 분류할 땐 각 분류기의 결정 점수 중 가장 높은 것을 클래스로 선택하면 된다=>OvR전략(one-versus-the-rest) 혹은 OvA(one-versus-all)

- 다른 전략은 0과 1 구별, 0과 2구별, 1과 2구별 등과 같이 각 숫자의 조합마다 이진 분류기를 훈련시키는 것=>OvO(one-versus-one)

 

다중 레이블 분류


- 지금껏 살펴본 경우는 각 샘플이 하나의 클래스에만 할당

- 하지만 분류기가 샘플마다 여러 개의 클래스를 출력해야 하는 경우도 有

- 예를 들어, 얼굴 인식 분류기의 경우 같은 사진에 여러 사람이 등장한다면 인식된 사람마다 하나씩 꼬리표(tag)를 붙여 앨리스, 밥, 찰리 세 얼굴을 인식하도록 훈련되었다 가정하자. 분류기가 앨리스와 찰리가 있는 사진을 본다면 [1, 0, 1]을 출력해야 한다.

- 이처럼 여러 개의 이진 꼬리표를 출력하는 분류 시스템이 다중 레이블 분류(multilabel classification) 시스템

 

다중 출력 분류


- 다중 출력 다중 클래스 분류(multioutput-multiclass classification, 간단히 다충 출력 분류)라고 함

- 다중 레이블 분류에서 한 레이블이 다중 클래스가 될 수 있도록 일반화 한 것

728x90
300x250
Comments