차원축소는 고차원의 데이터를 정보의 손실을 최적화하면 저차원으로 변환하는 것을 말한다. 데이터는 여러개의 속성값들로 구성되는데 각 속성을 하나의 차원으로 대응시킬 수 있다. 시각적으로 2,3차원의 데이터를 표현할 수 있지만, 그 이상의 고차원 데이터를 직관적으로 이해 할 수 있게 표현하기 어렵다. 한편 차원이 커지면 차원의 저주(curse of dimensionality)라는 문제를 만난다. 차원의 저주에는 여러가지 현상이 있는데, 그 중 하나는 차원이 커질수록 데이터간 거리가 유사해지는 경향을 보이는 것이다. 

다시말하면, 변수의 수가 늘어나 차원이 커지면서 발생하는 문제를 차원의 저주라고 한다. 차원이 커지면 왜 문제인지, 고려해 보면~

먼저 A라는 변수 1개가 있는 데이터를 가지고 있다고 하자. A가 가질 수 있는 값은 1, 2, 3이다. 이 경우 데이터를 채우기 위한 최소한의 데이터 건수는 3건이다.

 

다음으로 A, B 라는 변수 2개가 있는 데이터를 가지고 있다면 A와 B가 가질 수 있는 값은 각각 1,2,3이다. 이러한 경우 데이터를 채우기 위한 최소한의 데이터 건수는 9건이다

다음 그림은 A,B,C 라는 변수 3개가 있는 데이터를 가지고 있다면, A,B,C가 가질수 있는 값은 각각 1,2,3 이다. 이 경우 데이터를 채우기 위한 최소한의 데이터 건수는 27건이다

이와같이 차원이 증가하면 그 데이터 공간이 커지기 때문에 이를 채우기 위한 데이터 건수도 증가하게 된다.

이는 6명의 사람에 대하여 데이터를 수집한다고 하면 먼저 변수 A 만 수집하면 3가지 조건에 6명을 배정하는 것이므로 6/3=2=200%의 공간을 채울 수 없다. 추가로 변수 B까지 데이터를 수집했다고 한다면 6/9=0.66=66%의 공간을 채울 수 있다. 이번에는 변수 A,B,C에 대한 데이터를 수집한다면 6/22=0.22=22%의 공간만 채울수 없다

 

차원의 저주의 또 다른 현상은 차원이 커질수록 학습에 필요한 데이터가 기하급수적으로 증가한다는 것이다 분류문제는 특정 값이 어떤 부류에 속하는 것인지 결정하는 것으로, 결귝은 데이터 공간의 각 부분공간이 어떤 부류에 속하는 것인지 결정하는 것이다. 이러한 결정을 위해서는 각 부분 공간에 해당하는 학습 데이터가 있어야 한다.

위의 그림과 같이 1,2,3차원 공간에서 각 차원을 일정 크기 구간으로 분할한 부분 공간을 보여준다. 1차원 공간이 N개의 구간으로 나누어진다면, 2차원 공간은 개의 사각형 부분공간으로 나누어지고, 3차원 공간은 개의 입체 공간으로 나누어진다. N차원이 되면 개의 부분 공간이 만들어져 부분 공간의 갯수가 기하급수적으로 많이 필요해진다.

따라서. 차원을 축소하여 데이터를 사용하는 방법을 많이 사용하는데 차원을 축소하는 여러가지 방법들중 대표적인 것이 주성분 분석(Principal component analysis, PCA) 방법이 있다. 주성분 분석은 데이터를 projection 시킬때 가장 큰 분산을 갖는 축을 찾아서 소수의 축들을 기준으로 데이터를 표현하여 데이터를 저차원으로 축소해 표현한다.

이들 축은 데이터에 대한 공분산 행렬의 고유값이 큰 고유벡터에 해당한다. 많은 2차원 데이터 또는 값을 직선상에 수직으로 정사영시켜 직선상에서의 위치로 표현한다

 

 

 

 

 

회귀 문제는 출력값이 실수인 함수를 찾는 지도 학습 문제임. 주행거리에 따른 중고 자동차의 판매 가격 데이터가 있다고 하면 학습 데이터에 없는 주행거리에 대한 판매 가격을 알고 싶다면 어떻게 할까.. 회귀는 이러한 문제를 해결하기 위해 학습 데이터를 가장 잘 근사(approximation)하는 함수를 찾고, 이 함수를 이용하여 주어진 입력에 대한 예측값을 결정한다.

회귀함수로는 일차식, 다항식, 가우스 함수의 선형 결합식 등 여러 형태를 사용할 수 있다. 어던 함수를 사용하는가에 따라 목적함수에 대한 오차를 줄일 수 있는 정도가 결정된다. 고차함수와 같이 복잡도가 높은 함수를 사용할 때 학습 데이터에 오차를 줄일 수 있다. 적당한 복잡도의 함수를 사용하여 회귀를 하는것이 좋음.

 

 

[모델 복잡도와 적합정도]

 

위 그림은 함수 모델의 복잡도에 따른 학습데이터에 적합 정도를 보여주고 있다. 첫번째 그림은 상수값이 상수로 되어 있는 경우로 점으로 표현된 학습 데이터를 맞출수 없는 상황으로, 함수 모델이 너무 단순해서 부적합이 되는 경우임. 두번째 그림은 오차는 있으나 비교적 학습데이터를 잘 근사하는 경우하 볼 수 있으며 정적합 이라고도 한다. 세번째 그림은 복잡도가 높은 고차원함수를 사용하여 학습데이터에 대한 오차를 포함되었다면, 실제 데이터에 대해서는 오히려 좋지 못한 예측을 할 수도 있다. 즉, 복잡도가 너무 높은 함수 모델을 사용해서 부적합하게 학습한 상황이다.

모델 복잡도를 높이지 않으면서 오차를 줄이는 회귀 모델을 찾기 위해 목적 함수에 오차 항과 모델 복잡도 항을 갖는 다음과 같은 목적 함수를 사용하기도 한다.

 

목적함수 = (오차 항) + t( 모델 복잡도 항)

 

여기에서 오차 항은 차이의 제곱 합 이나 차이의 절대값 합  이 될 수 있고, t 는 오차항과 모델 복잡도 항의 상대적인 중요도를 결정하는 가중치이다. 이 목적함수에서 모델 복잡도 항이 벌점으로 작용한다.

모델 복잡도가 올라가면 오차를 줄일 수 있지만, 모델 복잡도항이 벌점으로 작용을 하기 때문에, 적당한 복잡도의 회귀함수가 선택될 수 있다.

회귀 기법중 binary classification 문제에 대해 적용되는 로지스틱 회귀가 있다. 학습데이터는 물론 입력과 출력의 조합으로 구성되고 출력은 0과 1로 나타난다. 이때 함수  모델 f(x)는 다음과 같이 로지스틱 함수(logistic function)가 사용된다

 

위 식에서 지수함수의 지수는 파라미터 와 입력 x의 선형결함을 표현한 것이다

출력값이 1에 가까우면 입력 데이터 x를 부류 1로, 0에 가까우면 부류 0 으로 판단한다. 그래프는 생략하겠다.

로지스틱 회귀함수를 학습할때 다음 목적 함수 가 최소가 되도록 하는 모델의 파라미터 는 gradient descent method를 사용한다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

분류는 데이터들을 정해진 몇 개의 부류로 대응시키는 문제.

분류 문제에서 주어지는 학습 데이터 : 입력 데이터 와 부류값 출력 의 쌍으로 구성된 집합.

이 학습 데이터의 입출력 대응관계를 만족시키는 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를 새로운 데이터로 생성한다.

 

 

 

 

+ Recent posts