목록Projects (11)
동삼이의 노트북

다중 레이블 분류 지금까지 다뤘던 분류기는 각 샘플이 하나의 클래스에만 할당되어있는 경우였다. 하지만 분류기가 샘플마다 여러 개의 클래스를 출력해야 할 때도 있을 것이다. 예를 들어 얼굴 인식 분류기가 있다고 가정할 때, 같은 사진에 여러 얼굴이 등장한다면 분류기는 인식된 사람마다 해당 값을 출력해야 할 것이다. 만약 분류기가 A, B, C 세 인물의 얼굴을 인식하는 상태에서 A와 C의 얼굴이 담긴 사진이 분류기에 입력된다면, 분류기는 [1, 0, 1]을 출력해야 할 것이다. 이처럼 여러 개 이진 꼬리표를 출력하는 분류 시스템을 다중 레이블 분류(multilabel classification) 시스템이라고 한다. MNIST 분류기에서는 좀 더 단순화하여, 7보다 큰 수에 large라는 레이블을 붙이고, ..

이전 포스팅에서 언급한 것 처럼, 최적의 모델을 찾았다고 가정한 후, 그 모델의 성능 향상을 위해 에러 분석을 진행하고자 한다. 우선 cross_val_predict()를 사용하여 오차행렬을 살펴볼 수 있다. 클래스가 10개가 있기 때문에 10 * 10 오차행렬이 생성된다. 이를 보다 편하게 보기 위해 matshow()함수를 이용하여 시각화한다. 위 오차행렬 시각화를 보면, 가운데 대각선 타일만 밝은 색으로 나타나는 것을 볼 수 있다. 이는 배열에서 가장 큰 값은 흰색, 작은 값은 검은색으로 정규화되어 그려지기 때문에 0인 샘플(행)을 0(열)으로 분류한 샘플의 갯수가 가장 많고, 1인 샘플을 1로 분류한 샘플의 갯수가 가장많다는 것을 알 수 있다. (2~9도 마찬가지) 하지만 대각선 타일의 색깔이 전부..

이전 포스팅까지 다뤘던 머신러닝 모델은 '5' 인지, '5가아님' 인지를 분류하는 이진 분류기 였다. 하지만 우리가 궁극적으로 분류해내고자 하는 것은 각 데이터가 어떤 숫자에 해당하는지를 분류해내는 것이다. 따라서 우리는 이진 분류가 아닌 다중 분류기(multiclass classifier)를 사용할 것이다. 이전에 사용했던 SGDClassifier나, RandomForestClassifier, 혹은 나이브 베이즈 분류기 등은 여러 클래스를 직접 처리할 수 있지만, 로지스틱 회귀나, SVM 같은 머신러닝 알고리즘은 이진 분류만 가능하다. 하지만 이러한 이진 분류기를 이용하여 여러 클래스를 분류할 수 있게 하는 다중 클래스 분류 기법이 있다. 예를 들어, 하나의 숫자만 구분하는 숫자별 이진 분류기 10개(..

Receiver Operating Characteristic(수신기조작 특성)의 약자인 ROC 곡선은 이진 분류 성능평가에 널리 쓰이는 도구 중 하나이다. 이는 이전 포스팅에서 다룬 정밀도/재현율 곡선과 매우 비슷하지만, ROC 곡선은 거짓 양성 비율(FPR)에 대한 진짜 양성 비율(TPR, 재현율)의 곡선이다. FPR은 양성으로 잘못 분류된 음성 샘플의 비율을 의미하며, 이는 1에서 음성으로 정확하게 분류한 음성 샘플의 비율(TNR)을 뺀 값이다. 이 TNR을 특이도라고 하며, 즉 ROC 곡선은 민감도(재현율)에 대한 1-특이도 그래프를 의미한다. 이 ROC 곡선을 그리기 위해 roc_curve() 함수를 사용하여 여러 임곗값에서 TPR과 FPR을 계산해야 한다. roc_curve() 함수를 통해 FP..

정밀도/재현율 트레이드 오프 앞 선 포스팅에서 정밀도와 재현율은 서로 트레이드 오프 관계에 놓여있다고 언급하였다. 이번 포스팅에서는 이에 관하여 두 수치 간 트레이드 오프 상황에서 어떤 값이 최적의 성능을 나타내는지를 알아보도록 하자. 우선 SGDClassifier가 분류를 어떻게 결정하는지 살펴보아야 한다. 이 분류기는 결정 함수(decision function)를 사용하여 각 샘플의 점수를 계산한다. 이 점수가 임계값보다 크면 샘플을 양성 클래스에 할당하고 그렇지 않으면 음성클래스에 할당한다. 위의 사진에서, 가운데 화살표가 결정 임곗값 이라고 가정해보자. 양성이라고 분류한 오른쪽 5개 숫자 중에서 실제 5(우리가 분류하고자 하는)는 4개, 5가 아닌 숫자는 1개가 있다. 즉 5개 중 4개를 분류해냈..

MNIST 데이터베이스는 (Modified National Institute of Standards and Technology database) 손으로 쓴 70000개의 작은 숫자 이미지로 이루어진 대형 데이터베이스이다. 이 데이터셋은 학습용으로 아주 많이 사용되며 이번 프로젝트에서는 이 MNIST 데이터셋을 이용하여 분류 모델을 만들어 보도록 하자. 사이킷런에는 MNIST 데이터셋을 내려받을 수 있는 헬퍼 함수들이 존재한다. 보통 사이킷런에서 읽어 들인 데이터셋들은 일반적으로 비슷한 딕셔너리 구조를 갖고 있다. 데이터셋을 설명하는 DESCR키 샘플이 하나의 행, 특성이 하나의 열로 구성된 배열을 가진 data키 레이블 배열을 담은 target키 MNIST 데이터 셋은 7만개의 이미지가 존재하며 각 이미..