분류는 데이터들을 정해진 몇 개의 부류로 대응시키는 문제.
분류 문제에서 주어지는 학습 데이터 : 입력 데이터 와 부류값 출력 의 쌍으로 구성된 집합.
이 학습 데이터의 입출력 대응관계를 만족시키는 y=f(x)를 찾음(f(x)는 함수 또는 규칙)
분류에 사용될 수 있는 여러가지 학습 기법 : 결정트리(decision tree) 알고리즘, 서포트벡터머신(support vector machine, SVM), 다층 퍼셉트론 신경망, 에이다부스트(AdaBoost), 임의 숲(random forest), 확률 그래프 모델 등.
학습된 함수 f(x)를 사용하여 데이터를 분류하는 프로그램을 classifier라 함
classifier 는 입력 데이터가 분포하는 공간을 부류별로 분할
학습은 각 부류를 나누는 결정 영역(decision boundary)을 찾고, 새로운 입력이 주어지면 결정영역에 따라 해당 위치에 대응하는 부류(별표)를 출력
classifier는 학습 데이터에 대해서 잘 맞도록 학습되지만 학습 데이터는 해당 문제영역에서 발생하는 모든 데이터가 아닌 샘플링된 일부 데이터이다. 그러므로 학습 데이터에 잘 맞는 classifier라도 새로운 데이터를 올바로 분류할 것이라는 확보는 없음.
예를 들면, 과일의 색을 기준으로 과일이 사과인지 귤인지 분류해보자
색이 오렌지색이면 귤로 빨간색이면 사과로 분류해 놓는다. 다음으로 빨간색 과일을 보여주면 사과라고 결과를 도출한다.
그런데,, 특성 추출 단계에서 특성을 과일의 색으로 할 것인지, 과일 크기로 할 것인지, 아니면 과일을 만질때의 감촉으로 할 것인지 정해야 하는데, 이것을 특성추출이라고 한다. 과일 색, 크기, 감촉 모두를 특성으로 추출 할 수도 있다.
만약 훈련용 데이터가 무한대로 많다면 이들 모두를 특성으로 만들 수도 있지만 대부분 훈련용 데이터가 부족하고 모두를 특성으로 만드는 것이 효율적이지도 않다. 이렇게 특성을 추출하는 것을 특성 설계제작, 즉 Feature Engineering이라고 함
학습방법의 일반화(generalization) : 오류가 있는 학습 데이터가 사용된다면 실제로 잘못된 결정영역을 찾을 수도 있으므로 학습에 사용되지 않은 데이터에 대해서 분류를 잘하는 calssifier가 좋은 것
[Clasification]
입력층(input layer)과 출력층(output layer) 사이에 다중의 은닉층(hidden layer)을 포함하는 인공 신경망(ANN: Artificial Neural Network).
심층 신경망은 다중의 은닉층을 포함하여 다양한 비선형적 관계를 학습할 수 있다. 그러나 학습을 위한 많은 연산량과 과하게 학습하여 실제 데이터에 대해 오차가 증가하는 과적합(overfitting), 기울기 값의 소실 문제(vanishing gradient problem) 등의 문제가 발생할 수 있다. 2000년대 이후 드롭아웃(drop-out), ReLU(Rectified Linear Unit), 배치 정규화(batch normalization) 등의 기법이 적용되면서 딥 러닝(deep learning)의 핵심 모델로 활용되고 있다.
심층 신경망은 알고리즘에 따라 비지도 학습 방법(unsupervised learning)을 기반으로 하는 심층 신뢰 신경망(DBN: Deep Belief Network), 심층 오토인코더(deep autoencoder) 등이 있고, 이미지와 같은 2차원 데이터 처리를 위한 합성곱 신경망(CNN: Convolutional Neural Network), 시계열 데이터 처리를 위한 순환 신경망(RNN: Recurrent Neural Network) 등이 있다.
[네이버 지식백과] 심층 신경망 [Deep Neural Network, 深層神經網] (IT용어사전, 한국정보통신기술협회)
2. Learning Rate(학습계수)
학습계수는 Gradient descent에서 간격을 어느정도로 할지를 결정하는것으로 너무 크면 결과점을 지나치거나 밖으로 나가는 경우가 생기고 너무 작으면 결과값까지 가는데 너무 많은 시간이 걸리므로 적절한 수치를 정해야 함. 경험 + 지식
3. Overfitting(과적합, 과학습)
Clasifier 성능을 평가할 때는 학습에 사용되지 않은 데이터를 사용해야 하는데, 이 데이터들을 테스트 데이터(TEST DATA)집합이라고 한다. 학습데이터에 대한 오류를 최소화하기 위해서는 너무 세밀하게 학습을 시키면, 학습데이터에 대한 clasifier의 분류 성능은 개선되는 반면, 테스트데이터에 대해서는 오히려 성능이 떨어질 수 있다. 이러한 상황을 Overfitting이라고한다.
즉, 데이터를 분류(Classification)하거나 또는 데이터에 인접한 그래프를 그리는 것(Regression)
그러나, 학습데이터 부족으로 학습이 정확히 안되어 트레이닝데이터에 가깝게 가지 못하거나, 트레이닝 데이터에 그래프가 너무 정확히 들어맞아서 발생하는것을 under fitting, over fitting 이라 한다
오버피팅은 너무 정확히 학습 되기때문에 샘플데이터는 거의 100%의 정확도를 나타내지만 다른 데이터를 사용하면 정확도가 급격히 떨어진다
오버피팅의 해결
1) 충분한 학습 데이터
2) 정규화(Regulation)
3) Feature의 수를 감소
※ 불균형 데이터 문제
특정 부류에 속하는 학습 데이터의 갯수가 다른 부류에 비하여 지나치게 많은 경우. A부류의 데이터가 전체의 99%를 차지한다면, 어떤 분류기가 입력에 상관없이 무조건 A부류를 출력한다고 해보자. 이 분류기의 정확도는 99%이다. 이런 경우에는 정확도로 분류기 성능을
평가하는 것이 무의미하다. 이와 같이 학습데이터의 부류 분표가 고르지 못해서 생기는 현상을 분균형 데이터 문제라고 함.
문제를 해결하기 위한 방법
1. 가중치를 고려하여 정확도를 결정하는 것. 빈도가 많은 데이터에 작은 가중치를 부여하고, 빈도가 적은 데이터에는 높은 가중치를 부여한다. 빈도가 적은 데이터가 틀리면 더 많은 틀린 것처럼 간주하고, 반대의 경우에는 틀리더라도 조금 틀린 것처럼 보이도록 하는 것.
2. 빈도가 높은 부류의 학습 데이터를 그대로 사용하지 않고, 그 중 일부만 무작위로 표본추출해서 사용하는 것임. 즉, 빈도가 높은 부류의 갯수를 줄여서 균형을 맞추도록 함. 이 경우는 학습 데이터를 일부 버리는 셈이 됨.
3. 빈도가 낮은 부류의 학습 데이터를 인공적으로 더 만드는 것임. 이때 새로운 데이터는 기존의 데이터를 사용하여 만든다. 이를 위한 대표적인 방법이 SMOTE(Synthetic Minority Over-Sampling Technique)알고리즘.
이는 먼저 빈도가 낮은 부류의 학습 데이터로부터 데이터를 하나 선택한다. 선택한 데이터 x의 k-근접이웃(k-NN, k-nearest neighbor)들을 낮은 부류의 학습 데이터로 부터 찾는다. k-근접이웃은 가장 가까운 데이터부터 k번째 가까운 것까지의 데이터를 의미한다. 아래 그림은 3-근접이웃까지 고려한 예이다. k-근접이웃들 중에서 무작위로 데이터 y를 선택한다. x와 y를 연결한 선 위에서 무작위로 선택한 위치를 새로운 데이터 z로 생성한다. 새로운 데이터 z의 위치를 수식으로 나타내는 다음과 같다. 여기서는 는 0과 1사이의 값임
데이터 x를 기준으로 한 3-근접이웃 중에서 y가 선택되었을때 x와 y를 연겨한 선 위에서 무작위로 선택한 점 z를 새로운 데이터로 생성한다.