한 페이지 머신러닝

차원축소 (Dimensionality Reduction)

 

[Dimensionality Reduction]

 

이번 시간에는

차원 축소 (Dimensionality Reduction)에 대해서 알아봅니다.

차원 축소는, 어떤 목적에 따라서 데이터의 양을 줄이는 여러가지 방법입니다.

 

멀쩡한 데이터의 양을 일부러 줄여서 사용하는 이유는 여러 가지가 있는데요.

첫째로, 데이터의 양이 줄어든다면

기본적으로 시간 복잡도 (time complexity, 계산하는 시간)와

공간 복잡도 (space complexity, 저장하는 변수의 양)가 줄어듭니다.

만약 같은 목적을 달성한다면

더 적은 자원으로 달성하는것이 더 효율적이겠죠.

 

둘째로,

아주 많은 차원의 데이터로 학습시킨 머신러닝 모델은 내부의 파라미터도 매우 복잡하게 형성되기 때문에 (=overfit 되기가 쉽기 때문에),

적은 양의 데이터에 대해서 이리 휘청 저리 휘청 불안정한 결과를 내놓게 됩니다.

입력 데이터의 차원을 줄여서 학습을 시키면 모델이 비교적 간단해지고, 그러면 적은 데이터 셋에 대해 안정적(robust)인 결과를 내놓게 되지요.

 

셋째로, 간단한 모델일수록 사람이 그 내부 구조를 이해하기에 편하고 (interpretable),

모델이 내놓은 결과를 2차원이나 3차원의 그림으로 축소해 드러내어서, 사람이 결과를 알아보기에 편합니다.

 

차원축소 방법은, 아래에 설명드릴 어떤 방법을 사용하든 간에 아무튼 원본 데이터를 훼손하는 것이므로

있던 정보를 일부 없애버리게 됩니다.

그러나 사람의 서로 다른 목적에 따라서, 결과를 크게 훼손하지 않는 선에서는 없어져도 상관없을 정보가 원본 데이터에 포함되어 있을 수 있겠죠.

어떤 목적 아래에서 어떤 정보를 얼만큼 없애면 좋을까에 대한 고민과 그 결과가 차원축소 방법입니다.

 

그림은 총 세 파트로 나뉘어 있습니다.

우상단의 분홍색 배경에는 데이터를 표현해 놓았습니다.

 

차원축소를 하는 방식에는 크게 두 가지가 있는데요,

상단의 짙은 회색 배경에는 feature selection 방법을 그려놓았습니다.

하단의 옅은 회색 배경에는 feature extraction 방법을 그려놓았습니다.

 

여기서 feature라는 것은 dimension과 같은 말로 이해하시면 되겠는데, 데이터의 한 열(column)을 의미합니다.

각각 x_0부터 x_4까지, 총 5개의 열이 입력 데이터로 사용됩니다.  d = 5이고요.

마지막 열(answer열)은, 학습시킨 모델의 결과를 검사하기 위한 정답 레이블입니다.


 

먼저 feature selection 방법부터 살펴볼게요.

총 5개의 열 중에서, 어떤 feature들을 쏙쏙 골라 뽑아서 데이터 테이블을 구성해야

학습 결과는 (거의) 그대로 보존하면서 데이터 양을 줄일 수 있을까 에 대한 고민입니다.

Forward search 방법과

Backward search 방법이 있는데요

제목을 보시면 짐작하시겠지만, 방향만 거꾸로이면서 사실은 같은 방식입니다.

원래 데이터 테이블로부터 feature를 쏙쏙 뽑아서 적은 양의(=k개의) feature로만 구성된 테이블을 만들겠다는 거지요.

이때 만들어진 결과 테이블을 F라고 부르겠습니다.

 

Forward search 방법은 총 네 줄의 수식으로 되어 있습니다.

1. F를 비어있는 공집합으로 둡니다.

2. 에러 E를 구하는데요, x_j (=j 번째 열) 을 F에다가 (임시로) 넣은 후에(합집합), 머신러닝 모델을 돌려서 에러 E를 확인합니다. 이때 x_0부터 x_4 까지의 모든 열에 대해서 반복해서 머신러닝 모델을 돌립니다. 그러면 그중에 가장 성능이 좋은 (=에러 E가 가장 작은) x_j를 발견할 수 있겠죠.

3. 2에서 찾은 결과를 결과 테이블인 F의 결과로 (영구적으로) 등록합니다.

4. 2와 3의 계산을 반복해서 실행하는데, 저희는 최종적으로 k개의 열로 이루어진 테이블을 원하므로,

첫 번째 반복에서는 d회의 머신러닝 훈련(training), 두 번째 반복에서는 (영구적으로 뽑힌 열을 제외하고) d-1회 의 훈련을 하고, k번째 반복에서는 d-(k-1)회의 훈련을 합니다.

 

Backword search 방법 역시 총 네 줄의 수식으로 되어 있는데요. Forward search 방법을 거꾸로 실행합니다.

1. F를 원래 데이터 전체로 놓습니다.

2. 마찬가지로 E를 구하는데, 이번에는 F로부터 열을 하나씩 빼 가면서 머신러닝 모델을 돌려 에러 E를 확인합니다. 퇴출시켰더니 모델의 성능이 가장 좋게 나오는  x_j 열을 알아낼 수 있겠죠.

3. 2에서 찾은 결과를 F로부터 퇴출시킵니다.

4. 저희는 k개의 열로 이루어진 테이블을 원하므로,

첫 번째 퇴출에서는 전체 데이터 열 개수인 d회를 계산, …, k번째 반복에서는 k+1 회의 계산이 이루어집니다.

 

차원 축소를 사용하는 때는

보통 k가 d보다 아주 작기를 원할때인데요,

forward search는 공집합에서 시작하는 반면, backword search는 전체집합에서 시작하므로, backword search가 좀더 계산이 오래 걸리겠지요.

 

이제 아래로 내려가서

feature extraction 방법을 살펴보겠습니다.

여기서는 알고리즘을 일일이 나열할 수는 없고, 각각을 어떤 다른 목적 아래서 사용하는 것인지

감을 잡는 것을 목표로 하겠습니다.

 

feature selection에서는 데이터 열을 쏙쏙 골라내었지만

feature extraction에서는 여러 무더기의 데이터 열을 뭉개는(=압축하는) 방법을 제안합니다.

 

정답 레이블(answer)을 사용하지 않는 unsupervised 방법과

정답 레이블(answer)을 사용하는 supervised 방법이 있는데요.

 

저희가 손에 들고 있는 데이터는 2차원의 데이터라고 가정하고요,

그림에서는 2차원으로 표시된 원본 데이터를 1차원으로 축소하도록 묘사해 놓았습니다.

 

먼저 보라색 글씨의 Factor analysis라는 것은,

저희가 손에 들고 있는 2차원 데이터를 생성(generate)하는데 가장 적합한 1차원의 숨겨진(=hidden 혹은 latent) 변수가 있다면

그것이 어떻게 생겼을까를 유추하는 것이 목적입니다.

 

파란 글씨의 Multidimensional scaling이라는 것은,

2차원의 데이터 점 각각의 정확한 위치 등은 일절 고려하지 않고

데이터 점 각각의 거리를 보존하면서 1차원으로 축소하려면 어떻게 하면 되겠느냐는 것이고요.

 

주황 글씨의 Principal component analysis라는 것은,

2차원의 데이터의 정보 손실을 최소화(minimize)하기 위해서는

어느 방향으로 짜부러트려야 할 것인가를 푸는 것입니다.

여기서 말하는 정보손실은 특히 데이터의 분산(variance=데이터가 퍼진 정도)를 의미하는데요,

principal component란, 축소시킨 이후에도 분산이 가장 큰 방향을 의미합니다.

 

빨강 글씨의 Linear discriminant analysis는 지도학습(supervised) 방법인데요,

데이터가 분류(classification)된 결과를 훼손하지 않으면서 데이터를 1차원으로 축소하려면 어떻게 하면 되겠는가

하는 문제를 풉니다.

분류가 되었다는 결과를 일단 손에 들고 계산을 해야 하므로 supervised 방법입니다.

 

차원축소의 여러가지 방법에 대한 개요와 목적만을 간략히 설명을 드렸는데요,

이런 것들이 있다는 것만 안다면, 검색을 해서 오픈된 라이브러리들을 가져다 코드에 사용하시는데는 무리가 없을 것으로 생각합니다.

머신러닝을 하는 모두가 수학자가 될 필요는 없으니까요ㅎ

혹 자세한 수식을 원하시면, 추가적인 검색을 통해 깊이있는 학습을 하실 것을 권장드립니다.

 

댓글

댓글 본문
graphittie 자세히 보기