Mathpresso 머신 러닝 스터디 — 6. 분류(Classification)

.

매스프레소(콴다)

오늘은 분류에 대해서 알아보겠습니다.

.

분류(Classification)

.

분류는 말 그대로 입력이 어떤 카테고리에 해당하는지 나누는 것입니다.

.

스팸 문자인지, 눈이 올지 안올지, 학생의 학점이 A,B,C,D 중 어느 것인지 등등의 방식으로 사용할 수 있습니다.

.

로지스틱 회귀는 앞에서 알아보았으니 이번엔

.

KNN(K-Nearest Neighbors) 방식을 알아보겠습니다.

.

이 방식은 분류에서 사용하는 가장 단순한 종류의 알고리즘이라고 평가받는 방식입니다. (실제로 이론적으로 가장 간단합니다.)

.

입력값과 K개의 가까운 점들이 있다고 생각하고 그 점들이 어떤 라벨과 가장 비슷한지를 판단하는 것입니다.

비슷하다는 것의 정의는 역시 오차(거리)로 판단합니다.

.

KNN — Wikipedia

초록색 점을 k = 3이라는 기준으로 바라보면(진한 원)

빨간색 삼각형과 더 비슷하다고 할 수 있으므로

(오차를 가중치로 두고 계산 — 일단 지금은 눈으로도 보입니다.)

초록색 입력은 ‘빨간 삼각형이다’ 라고 분류할 수 있습니다.

.

분류 기능을 강력하게 사용할 수 있는 MNIST 데이터를 사용하여 예시를 들겠습니다.

Mnist Data — http://yann.lecun.com/exdb/mnist/

.

이렇게 Mnist 데이터는 숫자 하나하나 라벨링 되어있는 28* 28의 이미지로 입니다.

.

55000개의 학습데이터와 5000개의 테스트 데이터를 제공합니다

(단비와 같은 데이터 입니다 ㅜ).

.

테스트 데이터 — 학습 데이터들과 비교한다.

K = 1 로 지정하면 가장 가까운 지점의 데이터를 정답으로 인지하는데 예제 코드를 돌려보면 (기존 데이터 5000개, 테스트 데이터 1000개)

89% 의 정확도를 나타냅니다.

.

(MNIST_KNN.py > setting: python 3.5, tensorflow,numpy)

proauto/ML_Practice ML_Practice -Python(with Tensorflow)github.com

.

이와 같은 분류에서 K를 늘리고 오차의 정도에 따라 판단 기준을 정하면 어느 정도 정확도가 향상 되겠지만 KNN은 한계가 명확한 알고리즘 입니다.

.

그 이유는

게으른 학습 +속도

이라고 할 수 있습니다.

.

KNN은 굉장히 게으른 알고리즘(lazy learning)입니다.

사실상 학습 이라기 보다는 학습 데이터를 가지고만 있지요.

보통 머신 러닝에서는 데이터를 가지고 학습을 하고 모델을 만드는 과정이 존재하는데

KNN은 이 부분이 생략된 분류 방법입니다.

.

그렇기에 KNN은 그냥 기준과의 단순 오차 비교이고 데이터가 많아지면 오래 걸리게 됩니다.(무한 노가다)

1000개 테스트하는데도 꽤 걸립니다…

.

그렇다면 우리는 어떤 방법으로 분류를 해야할까요??

.

앞서 배운 로지스틱 회귀를 사용해도 되고 딥러닝을 사용할 수도 있습니다.(처리하고자 하는 데이터에 따라서 다르겠죠?)

.

사실 TensorFlow 튜토리얼을 보면 Mnist의 데이터들을 로지스틱 회귀의 일반화된 형태인 Softmax 회귀를 사용해서 처리합니다.

.

(MNIST_LogisticRegression.py > setting: python 3.5, tensorflow,numpy)

proauto/ML_Practice ML_Practice -Python(with Tensorflow)github.com

.

KNN보다 엄청나게 빠른 속도로 계산이 끝나고 정확도도 92% 정도로 나오기에……데이터가 많고 진짜 인간의 힘으로는 못할 것 같은 상황을 맞이하게 되시면 KNN은 배경 지식으로 간직하시고 로지스틱 회귀or 딥러닝을 쓰면 됩니다.

.

결론이 좀 이상(?)하지만 분류에 대한 이야기를 마치고 다음 시간에는 인공신경망에 대한 이야기로 돌아오겠습니다.

.

cf) 오탈자 혹은 잘못된 개념에 대한 피드백은 항상 환영합니다.

기업문화 엿볼 때, 더팀스

로그인

/