머신러닝을 위한 가장 중요한 데이터 전처리 기법 중 하나가 바로 Dimensionality Reduction 입니다.
고차원의 데이터를 차원축소 없이 바로 training에 사용하면, 그에 따른 부작용이 상당하기 때문입니다.
앞으로의 글에서 이 Dimensionality Reduction에 대해 아래와 같이 총 4부에 걸쳐 다뤄보려고 합니다.
- 1 : Curse of Dimensionality
- 2 : Principal Component Analysis (PCA)
- 3 : Linear Discriminant Analysis (LDA)
- 4 : Kernel Principal Component Analysis (KPCA)
Abstract
이 글에서는 model training에 사용되는 데이터의 차원축소가 필요한 이유, 즉 Curse of Dimensionality에 대해 다뤄보려고 합니다.
Curse of Dimensionality란, 고차원의 데이터를 차원축소 없이 model training에 사용할때 이들 데이터가 가지는 특성으로 인해 모델의 성능이 심각하게 낮아지는 부작용을 의미합니다. 이러한 부작용을 발생시키는 고차원 데이터의 특성에는 크게 Data Sparsity와 Distance Concentration이 있습니다.
이 글에서는 먼저 이 Curse of Dimensionality에 대해 좀 더 자세히 알아보고 (Section 1), 이 현상의 원인이 되는 고차원 데이터의 특징인 Data Sparsity (Section 2) 와 Distance Concentration (Section 3)에 대해 각각 기술한 뒤, dimensionality reduction의 필요성에 대해 다시한 번 강조하며 마무리하도록 하겠습니다. (Section 4)
1. What is 'Curse of Dimensionality'?
1.1 What is dimension?
Curse of Dimensionality란 앞서 기술했듯, 고차원의 training data로 학습을 진행한 model의 성능이 심각하게 낮아지는 부작용을 의미합니다. 그렇다면 여기서 '차원'은 무엇을 말하는 걸까요?
데이터의 '차원(dimension)'이란, dataset의 각 sample을 정의하는 정보의 개수를 의미합니다. 가령 어떤 대학교에서 학생들의 이름, 학번, GPA를 기록해놓는 데이터베이스를 유지한다고 가정해봅시다.
NAME | ID | GPA |
---|---|---|
AAA | 20210000 | 3.77 |
BBB | 20211111 | 2.77 |
CCC | 20212222 | 4.30 |
DDD | 20213333 | 3.25 |
EEE | 20214444 | 2.55 |
위와 같이 재학생들의 데이터가 저장되어있다고 가정했을 때, 각각의 row는 NAME, ID, GPA 이렇게 총 3개의 정보로 구성되어 있습니다. 다시 말해, 위 데이터베이스의 각 데이터들은 앞서 말한 3개의 정보에 의해서 정의가 되는 것이죠. 그러므로 이 예시에서 각 데이터의 차원(dimension)은 3이라고 할 수 있습니다.
1.2 Wine dataset
1장에서 예시로 사용할 wine dataset에 대해 간략히 소개하겠습니다. Wine dataset은 이탈리아의 한 지방에서 생산한 서로 다른 3종류의 와인 품종들의 chemical analysis result를 기록해 놓은 데이터셋 입니다. 이 dataset의 각 data를 구성하는 attributes들은 아래와 같습니다.
- Alcohol
- Malic acid
- Ash
- Alcalinity of ash
- Magnesium
- Total phenols
- Flavanoids
- Nonflavanoid phenols
- Proanthocyanins
- Color intensity
- Hue
- OD280/OD315 of diluted wines
- Proline
이와 같이 13개의 정보들로 각 데이터들이 구성되어 있습니다. 물론 저 역시 이 속성들이 각각 무엇을 의미하는지 전혀 모릅니다. 다만 확실히 알 수 있는것은, wine dataset의 각 데이터들이 13차원의 데이터라는 사실을 알 수 있습니다. 아래 첨부한 사이트에서 다운받을 수 있는 'wine.data' 파일의 각 row에는, 해당 와인의 품종을 의미하는 class label (1,2,3)과 위의 13가지 attributes에 대한 값이 차례대로 기록되어 있습니다. 1장에서 이 dataset을 예시로 Curse of dimensionality를 설명하겠습니다.
Dataset link : https://archive.ics.uci.edu/ml/datasets/wine
1.3 Training classifier with high dimensional wine dataset
이제 위에서 기술한 wine dataset을 이용하여, model training을 진행해보겠습니다. 13차원의 wine data가 input으로 주어졌을 때, 그에 해당하는 class label (1,2,3)을 predict 하도록 하는 classifier를 training 합니다. 사용한 classifier와 hyperparameter는 아래와 같습니다. 코드와 결과를 확인할 수 있는 .ipynb file link를 첨부합니다.
- Classifier : KNN (K-Nearest Neighbors Classifier)
- Hyperparameter : n_neighbors = 5
- Training - Test split : 80-20
- .ipynb link: https://colab.research.google.com/drive/1pyqJagYeI6MvuKG9BuV2TYbMSEnB9e6a
<그림 1-1>의 실행결과에서 알 수 있듯이, Test accuracy가 0.944가 나왔습니다. 이 결과만 놓고보면, 'Test-set에 대해서도 약 94%의 performance를 보이니 이 정도면 model의 성능이 괜찮은 것 아닐까' 라고 생각할 수 있을 것 같습니다. 그러나 아래의 1.4절에서의 결과를 보시면 생각이 달라지실 겁니다.
(예시를 통해 Curse of dimensionality를 보다 직관적으로 기술하기 위해, 일부러 high dimensional data에 굉장히 취약한 KNN classifier를 선택했습니다.)
1.4 Training classifier after dimensionality reduction
이제 13차원의 wine dataset의 차원을 줄인 후 다시 classifier를 학습 시키겠습니다. 사용한 classifier 및 hyperparameter등은 1.3절에서와 동일합니다. 코드와 결과를 확인할 수 있는 .ipynb file link를 첨부합니다.
(본 예시에서 dimensionality reduction에 사용한 알고리즘인 'Principal Component Analysis'에 대해서는 다음 포스팅에서 다룰 예정입니다.)
- .ipynb link: https://colab.research.google.com/drive/1EN75N0svDB8AzkapcTRFjWdh2K5grrE#scrollTo=Lv_kDTcEqXnZ
<그림 1-2>는 기존의 13차원 데이터를 각각 2차원, 3차원으로 축소한 후 training을 진행한 결과를 보여줍니다. 앞서 13차원의 데이터로 training을 진행했을 때는 약 94%의 test-accuracy를 보였으나, 차원 축소를 진행한 후 2차원, 3차원의 데이터에 대해서 모두 약 97%라는 향상된 test-accuracy가 관찰됩니다.
차원이 줄었음에도 불구하고, 다시 말해 해당 데이터를 정의하는 정보의 개수가 상당히 줄었음에도 불구하고, 오히려 model performance가 향상되는 역설적인 상황이 발생한 것입니다. 데이터의 차원이 높을수록 우리는 해당 데이터에 대한 더 많은 정보를 가지고 있기 때문에, 이들 데이터를 이용하여 학습한 ML model의 성능 역시 저차원의 데이터를 이용하여 학습한 결과에 비해 좋을 것이라고 직관적으로 생각하기 쉽습니다. 그러나, 위의 예시들은 이 직관을 정면으로 반박합니다. 즉, 데이터의 차원이 불필요하게 높아지면 model performance 역시 심각하게 저하될 수 있음을 시사합니다.
그리고 이것이 바로 'Curse of dimensionality'의 정의입니다. 말 그대로 데이터의 차원이 높아지면, 이것이 더욱 향상된 model performance를 가져다 주는 것이 아닌, 오히려 이를 심각하게 저하시키는 '저주 (Curse)'로서 작용한다는 것입니다. 그렇다면 데이터를 정의하는 정보의 개수가 많아질수록 ML model의 성능이 저하되는 저주가 발생하는 근본적인 원인은 무엇일까요?
2. Data Sparsity
본 장에서는 Curse of dimensionality가 발생하는 근본적인 원인 중 하나인 Data sparsity에 대해 기술합니다.
2.1 What is data sparsity?
Data sparsity란, 말 그대로 data가 정의될 수 있는 전체 domain에 비해 실제 데이터가 너무나도 희박하게(sparse) 분포되어 있음을 의미합니다. 고차원의 공간에서 data point들이 너무나도 희박하게 분포되어 있기 때문에, model training을 진행하더라도 해당 ML model은 이 희박한 data point들에 상당히 편향된 정보만을 얻게 됩니다. 따라서 이 model이 training 당시 목격하지 못한 unseen data들이 주어졌을 때 나타나는 심각한 성능저하, 즉 overfitting 이 발생할 가능성이 높습니다.
Data point들이 희박하게 분포되어 있다는 말은, 그만큼 우리가 아직 보지 못한 unseen data들이 존재할 수 있는 영역이 매우 넓다는 것을 의미합니다. 이를 직관적으로 기술하기 위해 아래와 같이 그림을 첨부합니다. 해당 plot을 그린 .ipynb file link를 첨부합니다.
.ipynb link : https://colab.research.google.com/drive/11lPYh4Ds3uFdHm0VloFTGbaB5YYukeDI#scrollTo=KmB2rQ4ifxyn
그림 <2-1>의 왼쪽 plot은 검은선으로 표시된 1차원 domain에 놓여있는 data point들, 오른쪽 plot은 2차원 domain에 분산되어 있는 data point들을 나타낸 것입니다. 보다 공정한 비교를 위해 두 개의 plot에서 각 data point들의 x좌표는 동일하게 설정하였습니다.
이렇게만 보더라도 data sparsity에 대해 좀 더 확실하게 체감이 됩니다. 두 개의 plot 모두 10개의 data point가 존재하지만, 이것이 왼쪽 plot의 1차원 domain에 놓였을때 보다 오른쪽 plot의 2차원 domain에 놓였을 때 훨씬 sparse하게 분포되어 있음을 육안으로도 확인할 수 있습니다. 데이터의 차원이 하나 더 많아졌다는 이유만으로, 그 데이터들이 존재할 수 있는 domain의 영역이 어마어마하게 커진 셈입니다. Data point의 개수는 동일한데 그것들이 존재할 수 있는 영역만 넓어졌으니, 당연히 그 안에 놓여있는 데이터들은 sparse하게 분포될 수 밖에 없고, 자연스럽게 아직 목격하지 않은 data point들이 존재할 수 있는 영역이 매우 넓어지는 것입니다.
2.2 Why data sparsity is a problem?
그렇다면, 데이터의 차원 증가로 발생하는 data sparsity가 문제가 되는 이유는 무엇일까요? 직관적인 묘사를 위해 <그림 2-1>의 각 data point들을 구분하는 classification model을 training 하는 상황을 예시로 들겠습니다. 즉, <그림 2-1>에서 blue point가 존재하는 영역과 red point가 존재하는 영역을 구분하는 적절한 decision boundary를 생성하는 상황을 생각합니다.
.ipynb link : https://colab.research.google.com/drive/1cypuaxHHDdNK9vAb4HJw6zNrj9hLb2Dn
<그림 2-1>의 왼쪽 plot에 묘사된 1차원 data point들을 분류하는 몇 가지의 decision boundary를 나타낸 plot입니다. 1차원 영역에서 각 data point들을 분류하는 decision boundary는 0차원의 점으로 정의됩니다만, 가시성을 위해 <그림 2-2>에서는 검은색 vertical line segment로 표현하였습니다.
<그림 2-2>를 보면 알 수 있듯이, data point들을 분류하기 위해 생성가능한 decision boundary의 경우의 수는 그렇게 많지 않습니다. blue point중 가장 오른쪽에 위치한 data와, red point중 가장 왼쪽에 위치한 data 사이의 임의의 점이 decision boundary가 될 것이기 때문입니다. 이렇듯 데이터들이 1차원 영역에 놓여있는 상황이라면 data가 sparse하지 않기 때문에, 즉 아직 목격하지 못한 unseen data가 존재할 수 있는 영역이 매우 좁기 때문에, 각 data point들에 대한 정보를 학습하면 그것이 곧 해당 데이터들이 정의된 영역 전체에 대한 일반화된 정보를 얻는 것과 같은 효과를 가져옵니다. 따라서 영역 전체에 대한 일반화된 정보를 학습한 ML model은 이 정보들을 이용하여 결정해야 하는 decision boundary의 경우의 수를 획기적으로 줄일 수 있고, 결과적으로 decision boundary의 정확도가 unseen dataset에 대해서도 높게 나타날 가능성이 큽니다.
.ipynb link: https://colab.research.google.com/drive/16cqqyRwbQJFasUiAlcVFH8g8OOuu8SEO
<그림 2-3>은, <그림 2-1>의 오른쪽 plot에 묘사된 2차원 data point들을 분류하는 몇 가지의 decision boundary를 나타낸 plot입니다. 2차원 영역에서 각 data point들을 분류하는 decision boundary는 1차원의 line으로 정의되기에 이를 검은색 점선으로 묘사하였습니다.
<그림 2-2>에 묘사된 1차원의 경우와는 달리, <그림 2-3>에서는 가능한 decision boundary의 경우의 수가 한눈에 봐도 무궁무진하게 많음을 알 수 있습니다. 차원이 증가함에 따라 굉장히 넓어진 전체 영역 내에서 training set으로 주어진 10개의 data point만을 정확히 분류해내면 되는 것이기에, 위쪽 2개의 경우처럼 깔끔한 boundary도 가능하지만 아래쪽 2개의 경우처럼 해괴망측한 boundary 역시 만들어질 수 있습니다.
1차원의 경우와는 달리, 2차원 영역에서 10개의 data point들은 굉장히 sparse하게 분포되어 있습니다. 즉 우리가 training set을 통해 이미 학습했던 data 이외에, 아직 보지 못한 unseen data들이 존재할 수 있는 영역이 압도적으로 넓다는 것입니다. 그렇기 때문에 2차원 영역에 분포되어있는 10개의 data point들에 대한 정보를 학습하여도, 이것이 결코 이 데이터들이 정의된 2차원 영역 전체에 대한 일반화된 정보를 제공해주지는 못합니다. 따라서 ML model은 sparse하게 분포 되어있는 training dataset에 편향된 정보만을 얻게 되고, 이 편향된 정보를 바탕으로 생성되는 decision boundary는 실제 unseen data에 대해서 그 정확도가 낮아질 가능성이 상당히 높습니다. 즉, overfitting의 가능성이 상당히 높아집니다.
.ipynb link: https://colab.research.google.com/drive/19nEYMJrjtscuYvd3mQvEXi80mGxkV83y
<그림 2-4>는 <그림 2-3>에 새로운 unseen data를 추가한 상황을 가정하여 그린 plot 입니다. Training dataset은 동그라미로, unseen test dataset은 x로 묘사되어 있습니다. 그림에서 알 수 있듯이, 왼쪽 위의 plot을 제외하면 다른 모든 decision boundary는 unseen data에 대해 정확한 분류를 해내지 못하는 것을 알 수 있습니다. 이렇듯 training dataset에 대해서는 좋은 성능을 내지만, unseen test data에 대해서는 성능이 저하되는 현상을 overfitting이라고 합니다. Data sparsity로 인해서 ML model이 데이터가 정의되는 공간 전체에 대한 일반화된 정보를 학습할 수 없었고, 이 부족한 정보를 바탕으로 생성된 decision boundary는 sparse하게 분포되어 있는 data에 편향되게 만들어지기 때문에 overfitting의 가능성을 상당히 증가시킬 수 있음을 시사합니다.
비록 이 글에서는 Classification의 예시만을 들었지만, 이외의 다른 machine learning context에서도 (regression, unsupervised learning etc.) 차원의 증가로 인한 data sparsity가 심각한 overfitting을 유발하는 현상은 동일하게 발생합니다. 데이터가 정의되는 영역이 넓어짐에 따라 이들의 분포가 자연히 sparse 하게 되고, 아직 목격하지 못한 unseen data가 존재할 수 있는 영역이 압도적으로 넓어진 상태에서 training을 진행하면 당연히 기존 데이터들에 편향된 결과가 만들어지기 때문입니다.
3. Distance Concentration
본 장에서는 Curse of dimensionality가 발생하는 또다른 원인 중 하나인 Distance Concentration에 대해 기술합니다.
3.1 What is Distance Concentration?
Distance concentration이란, 데이터의 차원이 증가하면서 각 data point간의 distance가 거의 일정해지는 현상을 의미합니다. 즉, 어떤 두 개의 data point를 선택하더라도 그들간의 distance가 매우 유사해진다는 것입니다.
ipynb link: https://colab.research.google.com/drive/16sC2DWGFxYhRByN-AvXcH7b1Pr2I131O
<그림 3-1>은 다양한 차원에서 data point간 distance의 분포를 나타낸 그림입니다. 각 차원에서 100개의 data point를 임의로 생성하였고, 이들간의 pairwise euclidean distance를 각각 계산하여 그림으로 나타낸 것입니다.
이렇게만 보더라도 차원이 증가하면 할수록 분포가 점점 모이는 것을 알 수 있습니다. 다시 말해 저차원에서는 거리의 분포가 비교적 uniform 하지만, 차원이 커질수록 점점 특정 distance를 중심으로 모이는 현상이 발생한다는 것입니다.
잘 보이지는 않지만, 각 subplot의 xlabel로 분포의 표준편차를 (standard deviation)을 적어 놓았습니다. 이 숫자가 차원이 커질수록 감소하는 현상을 목격할 수 있는데, 이를 아래의 그림에서 더욱 확실하게 확인할 수 있습니다.
<그림 3-2>에서 볼 수 있듯이, 차원이 증가할수록 거리 분포의 표준편차가 감소하는 현상이 발생합니다. 즉, 차원이 증가할수록 각 data point간의 거리가 비슷해진다는 것입니다. 각 Data point를 random module을 사용해 임의로 생성하였지만, 차원이 증가할수록 이들의 거리가 약속이나 한듯이 비슷해지는 것입니다.
3.2 Why distance concentration happens?
그렇다면 이 현상은 왜 발생하는 것일까요? 차원이 증가할수록 점들간의 거리가 비슷해진다는 현상은, 어찌보면 그저 우연의 일치에 의한 신기한 일처럼 받아들여질 수도 있을 것 같습니다. 그러나 여기에는 수학적 원리가 숨어 있습니다.
아래에 이어질 내용에서 수식을 이용한 난잡한 설명이 포함될 수 있으니, 그에 앞서 결론을 먼저 말하겠습니다. Distance concentration은 차원이 높아질수록 절대다수의 data point가 공간의 외곽에 존재하기 때문에 발생합니다. 해당 data point들이 정의된 공간에 대해, 그 공간의 외곽 부분의 부피가 차원이 커질수록 공간 전체의 부피와 맞먹을 정도로 매우 커집니다. 부피가 커진다는 것은 그만큼 data가 존재할 확률이 올라간다는 것이므로, 대부분의 data point가 공간 전체에 고르게 분포하는 대신 공간의 외곽에 존재하게 되는 것입니다.
공간의 외곽에 존재하는 서로 다른 데이터 간의 거리는 해당 공간의 지름에 가깝습니다. 공간의 끝과 끝 사이의 거리와 비슷하기 때문입니다. <그림 3-1>에서 차원이 증가할수록 분포가 오른쪽으로 모이는 것은 그 때문입니다.
이를 수학적으로 증명해 보겠습니다. 그에 앞서 아래와 같이 전제조건들을 정리합니다.
- 공간은 Euclidean space로 한정
- n차원 Euclidean space의 부피는 반지름의 n제곱에 비례
- 전체 공간에 concentric한 부분 공간을 정의하고 반지름을 전체 공간 반지름의 $\alpha$배로 정의. ($0 < \alpha < 1$ )
- 전체 공간에서 부분 공간을 제외한 나머지 부분을 '외곽 부분'으로 정의.
- 그러므로 n차원에서 전체 공간 대비 외곽 부분의 부피 비는 $1-\alpha^n$.
<그림 3-2>는 위에서 기술한 상황을 도식화 한 것입니다. Center를 중심으로한 euclidean space가 정의되어 있고, 반지름이 $\alpha$배인 부분공간이 흰색 부분으로 표시되어 있습니다. 전체 공간에서 부분 공간을 제외한 영역인 파란색 부분이 외곽 부분이 되고, 전체 공간 대비 외곽 부분의 부피 비는 위에서 기술한 바와 같이 $1-\alpha^n$. 입니다.
우리는 이 부피 비가 차원이 증가할수록 같이 증가한다는 것을 보이고자 합니다. $V_{outer} = 1-\alpha^n$라 놓고 아래와 같이 전개합니다.
$V_{outer} = 1-\alpha^n$
$\frac{dV_{outer}}{dn} = - \alpha^n ln\alpha$
$0 < \alpha < 1$ 이므로 $ln\alpha < 0$이 되어 $\frac{dV_{outer}}{dn} > 0$ 이 성립합니다. 다시 말해, 차원이($n$) 증가할수록 외곽 부분의 부피비($V_{outer}$) 역시 증가한다는 것입니다. 도식화를 위해 $\alpha = 0.9$로 설정하고 아래와 같이 그림을 그려봤습니다.
<그림 3-3>은 전체 공간에 대한 외곽 부분의 부피비를 차원에 대하여 나타낸 그림입니다. 그래프의 각 점은 2, 4, 8, 16, 32, 64, 128, 256차원을 나타냅니다. 그림에서 알 수 있듯이, 저차원에서는 외곽 부분의 부피비가 매우 작으나, 차원이 커질수록 외곽 부분의 부피가 전체 공간의 부피에 수렴하는 모습을 볼 수 있습니다.
앞서 $\alpha = 0.9$로 설정하였기 때문에, <그림 3-3>을 다음과 같이 해석할 수 있습니다.
- 16차원 euclidean space에서 반지름의 10% 두께의 외곽 부분이 전체 공간의 약 80%를 차지합니다.
- 또한 32차원 이상의 euclidean space에 대해서는 반지름의 10% 두께의 외곽 부분이 전체 공간의 거의 대부분을 차지합니다.
우리는 3차원의 세계에 살고있기 때문에 이러한 사실이 직관적으로 잘 와닿지 않습니다만, 앞서 보였듯이 고차원 공간에서는 외곽 부분이 공간의 대부분을 차지합니다. 그렇기 때문에 고차원 공간에서의 data point는 그 절대다수가 해당 공간의 외곽에 존재할 수 밖에 없고, 그 때문에 이들 간의 거리가 공간의 지름과 비슷한 수치로 서로 유사해지는 현상이 발생하는 것입니다.
3.3 Why distance concentration is a problem?
점들간의 거리가 서로 유사해지는 distance concentration이 문제가 되는 이유는 무엇일까요? 분석의 대상이 되는 data point간의 거리를 이용하여 model training을 진행하는 알고리즘은 이 문제에 상당히 취약할 수 밖에 없기 때문입니다.
1장에서 wine dataset을 분류하기 위해 사용한 KNN classifier가 그 대표적인 예시입니다. KNN classifier는 새로운 데이터가 주어졌을 때, 기존 데이터들과의 거리를 이용하여 새로운 데이터에게 할당할 class label을 결정합니다. 다시 말해 새로운 데이터와 가까운 곳에 1번 label에 해당하는 데이터가 다른 label에 해당하는 데이터들 보다 많다면, 1번 label을 할당하는 방식입니다.
그러나 고차원의 공간에서 distance concentration이 발생한 경우라면 상황이 곤란해집니다. 새로운 데이터가 주어졌을 때 서로 다른 기존 데이터들과의 거리가 모두 비슷하다면, 이 데이터에 어떤 class label을 할당해야할지 명확하게 결정하기가 힘들어지기 때문입니다.
ipynb link: https://colab.research.google.com/drive/1JwQcjBzjl42LymkbJgq_8eTqRaaFcGB7
<그림 3-4>는 distance를 기반으로 classification을 수행하는 예시를 그림으로 나타낸 것입니다. 새로 주어진 검은색 data를 빨강, 초록, 파랑 중의 하나로 분류하는 상황입니다. 더욱 거리가 가까운 쪽으로 분류한다고 가정합시다.
왼쪽 그림에서는 답이 명확합니다. 새로 주어진 검은색 데이터에서 가장 가까운 기존 데이터는 초록색 데이터이기 때문에, 이 classification model은 새로운 데이터를 'green'으로 분류할 것입니다.
그러나 오른쪽 그림에서의 경우는 상황이 좀 애매해집니다. 새로 주어진 검은색 데이터와 다른 모든 기존 데이터와의 거리가 일치합니다. 이 경우 classification model은 이들 중 임의로 하나의 분류를 선택할 수 밖에 없습니다. 즉, 데이터간의 distance로부터 유의미한 정보를 얻지 못하기 때문에 새로 들어온 데이터에 대해서 random guess를 할 수 밖에 없는 상황이고, 그러한 상황에서 좋은 performance를 보장하기는 매우 어렵습니다.
이렇게 데이터간의 거리를 이용하는 ML 알고리즘의 경우, distance concentration에 매우 취약할 수 밖에 없습니다. 데이터간의 거리가 다 비슷하기 때문에, 이 거리 정보로 부터 유의미한 insight를 도출해내기 매우 어렵기 때문입니다. 그러므로 distance concentration이 매우 빈번하게 발생하는 고차원 공간에서는, distance를 기반으로 학습을 수행하는 ML 알고리즘을 적용하기가 매우 어렵습니다.
4. Conclusion
고차원의 데이터를 차원 축소 없이 학습에 이용했을 때 발생할 수 있는 심각한 부작용인 curse of dimensionality에 대해 알아보았습니다. 이 부작용이 발생하는 근본적인 원인인 Data Sparsity와 Distance Concentration에 대해서도 자세히 살펴 보았습니다.
고차원의 공간에서 데이터가 매우 희박하게 분포하는 Data Sparsity로 인해서, ML model이 데이터가 정의된 공간 전체에 대한 일반화된 정보를 얻는 것이 아닌 희박하게 분포되어있는 기존 데이터들에 편향된 정보만을 얻게 되고, 그에 따라 Overfitting의 가능성이 높아지는 현상을 살펴 보았습니다.
고차원의 공간에서 각 데이터간의 거리가 서로 유사해지는 Distance Concentration은, 차원이 증가함에 따라 절대다수의 데이터가 공간의 외곽에 존재하기 때문에 발생하는 현상임을 보였습니다. 또한, 데이터간의 거리 정보를 이용하여 학습을 진행하는 ML 알고리즘의 경우 (KNN classifier, K-means clustering etc.), Distance Concentration에 매우 취약할 수 밖에 없음 또한 살펴 보았습니다.
따라서 고차원의 데이터를 이용하여 성공적인 모델 학습을 진행하기 위해서는 어느정도의 차원 축소가 반드시 필요합니다. 물론 dataset에 따라서, 사용하는 ML 알고리즘에 따라서 차원 축소의 필요여부와 그 정도는 당연히 차이가 있을 것입니다. 다음 글에서는 차원 축소의 가장 기초적인 방법 중 하나인 PCA (Principal Component Analysis)에 대해서 자세히 다뤄보고자 합니다.