차원의 저주 (curse of dimensionality)

    🧩 차원의 저주

    예전 Lab실에서 차원 축소 기법인 PCA에 대해 고민을 할때부터 알고있다고 착각했던 적이 있어서 정확히 알아보는 시간이 필요했다.

     

    🖼️  이미지는 "고차원 데이터" 다

    800x600 픽셀의 RGB 이미지를 예로 들어보면, 이 이미지를 데이터로 표현할 때는 800x600x3, 즉 총 1,440,000차원으로 나타낼 수 있습니다. 이때 "이미지가 2차원 데이터가 아닌가?"라는 의문이 들 수 있다.

    🔍 이미지는 왜 고차원 데이터일가? (생략가능)

    더보기

    하지만 여기서 말하는 "2차원"은 기하학적인 관점에서의 공간적 구조를 뜻한다. 이미지를 생각해보면, 각 픽셀은 (x, y)라는 2차원 좌표를 가지고 있다. 그리고 각 픽셀의 R, G, B 값은 각각 (0~255) 사이의 값을 가지며, 이 세 가지 값이 결합되어 우리가 특정한 색상으로 인식하게 된다. 결국, 각 픽셀은 (x, y)라는 2차원 평면상의 위치를 기준으로 색을 표현하기 때문에, 이미지의 공간적 구조는 "2차원"으로 간주되는 것이다. 

     

    반면, 1,440,000이라는 값은 데이터를 저장하거나 처리하는 방식에서의 "차원"을 의미한다. 이는 각 픽셀에 할당된 R, G, B 값을 모두 포함한 전체 데이터의 크기를 말하는 것으로, 데이터적으로는 각 픽셀에 필요한 정보를 표현하기 위해 많은 숫자가 필요하다는 것을 말한다. 

    1,440,000차원에서 0부터 255사이의 값중 하나가 value로 존재할 수 있는 것인데, 이때 이렇게 큰 차원에서 KNN알고리즘(가장 가까운  이웃들이 어떤 class에 속하는지를 확인해서 해당 class를 결정짓는 알고리즘)을 적용한다고 가정해보자. 그러나 우리가 실제로 정답 label을 알고있는 데이터는 10,000개밖에 없다면 이 KNN알고리즘이 제대로 작동할 수 있을까? 정답은 아니다. 

     

    1차원에서의 점 1개와, 2차원에서의 점 1개, 3차원에서의 점 1개를 상상해보자. 

    차원이 늘어날수록 동일한 개수의 점이지만 점차 점이 희소해진다.

    데이터를 밀도 있게 유지하려면 차원이 증가할수록 기하급수적으로 더 많은 데이터가 필요할 것이다. 

    이때 왜 데이터를 밀도 있게 유지하는 것이 중요한 이유는, 데이터가 밀도 있게 유지되어야만 학습 알고리즘이 데이터 간의 관계나 패턴을 학습하기 위해서이다. 

     

    그럼 이제, 이를 쉽게 이해할 수 있도록 재미있는 예를 하나 들어보겠다.


    🍩 도넛 가게 예제

    도넛 가게를 운영한다고 상상해보자. 고객들이 도넛을 주문할 때, 그들이 원하는 도넛의 을 결정짓는 두 가지 중요한 요소가 있다.

    1. 설탕의 양 (달달함)
    2. 초콜릿의 양 (쌉쌀함)

    이 두 가지 요소를 기준으로 도넛을 만드는 공간을 생각해보면, 이는 2차원 공간으로 표현된다.

    • 고객의 취향은 이 2차원 공간에서 특정한 구역(작은 영역)에 몰려 있을 가능성이 높다.
    • 즉, 고객이 좋아하는 조합을 몇개의 표본만 존재한다면 쉽게 찾을 수 있다.

    하지만 열정가득한 사장님은 더 돈을 많이 벌고싶어, 새로운 토핑 옵션을 추가한다고 가정해보자.

    • 딸기잼 (달콤함)
    • 견과류 (바삭함)
    • 크림 (부드러움)

    이제 도넛의 맛을 결정짓는 요소는 2개에서 5개로 늘어난다. 즉, 5차원 공간이 만들어지는 것이다.

    • 차원이 늘어나면서 도넛 조합의 수는 기하급수적으로 증가한다.
    • 고객이 원하는 조합은 여전히 특정 공간에 몰려 있지만, 전체 5차원 공간에서는 매우 희박해지기 때문에 이를 찾기 위해 조사해야하는 데이터의 수가 훨씬 많아져 사장님은 최적의 조합을 판단하기가 어려워진다.

    결론적으로

    차원이 증가할수록 데이터는 희소해지고, 유용한 정보를 찾는 데 필요한 데이터의 양과 계산 비용이 폭발적으로 증가한다.

    고차원 데이터를 다룰 때, 데이터가 희소해지고 모델이 과적합되어 제대로 학습하지 못하는 문제가 발생한다. 이것이 바로 차원의 저주이다. 

     

    🛠️ 차원의 저주를 해결하는 방법

    이러한 차원의 저주를 해결하기 위해서는, 주로

    • 정규화 (normalizaing)
      • 데이터의 특정 feature 값의 스케일을 조정해, 각 feature가 모델 학습에 고르게 영향을 미치도록 한다.
    • 차원축소 (dimension reduction)
      • 고차원 데이터에서 중요한 정보를 유지하면서 불필요한 차원을 제거하는 기법이다. 

    2가지 방법이 사용된다.

     

    데이터에서 특정 feature값의 영향력을 제어하여 균형을 맞추는 것이 normalizaing 기법이고, 데이터의 차원을 줄여 효율적으로 표현하는 기법이 dimension reduction 이다. 

    댓글