Dimensionality Reduction
차원 축소는 PCA, t-SNE, UMAP, 오토인코더와 같은 방법을 사용해 구조를 유지하면서 많은 특징을 가진 데이터를 훨씬 적은 차원으로 매핑합니다.
차원 축소는 특징이 많은 데이터의 정보 표현을 훨씬 적은 수의 특징으로 변환하면서 데이터의 분산, 점 사이의 거리, 이웃 점과 같은 중요한 정보를 보존합니다. 640x640 컬러 이미지에는 픽셀 값이 120만 개 넘게 있고, 유전자 발현 프로필에는 20,000개의 측정값이 포함될 수 있으며, 이미지 임베딩에는 수백 개의 차원이 있는 경우가 많습니다. 차원을 줄이면 머신러닝 모델의 속도가 빨라지고 과적합 위험이 낮아지며 스토리지 사용량이 줄어듭니다. 또한 데이터 시각화를 위해 데이터를 2차원이나 3차원으로 표시할 수 있습니다.
차원이 적으면 좋은 이유#
Richard Bellman은 차원이 늘어날수록 문제가 더 어려워지는 현상을 설명하기 위해 동적 계획법 연구에서 "차원의 저주"라는 표현을 만들었습니다. 새로운 특징이 추가될 때마다 공간의 부피가 기하급수적으로 커지므로, 일정한 양의 학습 데이터가 공간을 점점 더 희소하게 채웁니다. 차원이 매우 높으면 임의의 점 사이 거리가 거의 같아져 k-최근접 이웃과 k-means 클러스터링처럼 거리를 기반으로 하는 기법의 효과가 약해집니다.
실제 데이터는 공간을 가득 채우는 경우가 드뭅니다. 손글씨 숫자 이미지는 주로 획의 두께와 기울기, 그 밖의 몇 가지 요인에 따라 달라지므로 픽셀 공간 안의 훨씬 저차원적인 곡면, 즉 다양체 근처에 놓입니다. 차원 축소는 해당 곡면상의 좌표를 찾습니다. 레이블이 필요하지 않으므로 대부분의 기법은 비지도 학습의 한 형태입니다.
선형 및 비선형 기법#
Karl Pearson이 1901년에 소개한 주성분 분석(PCA)은 데이터를 분산을 많이 설명하는 순서로 정렬된 직교 방향에 투영하고 앞쪽의 몇 개 방향만 유지합니다. 설명된 분산 비율을 보면 데이터셋에 필요한 주성분의 수를 알 수 있습니다. Ronald Fisher가 1936년에 고안한 선형 판별 분석은 클래스 레이블을 사용해 클래스를 가장 잘 구분하는 방향을 찾습니다. 랜덤 프로젝션은 데이터를 무작위 행렬과 곱하는 방식입니다. Johnson-Lindenstrauss 보조정리에 따르면 n의 로그에 따라서만 차원 수를 늘리면서 n개 점 사이의 거리를 지정된 허용 오차 안에서 보존할 수 있습니다.
비선형 기법은 곡선 형태의 다양체를 따릅니다. 2000년에 모두 Science에 발표된 Isomap과 국소 선형 임베딩은 다양체를 따라 측정한 거리와 국소 선형 이웃을 보존합니다. t-SNE와 UMAP은 비슷한 점을 2D 맵에서 서로 가까이 배치하므로 임베딩 클러스터를 시각화하는 표준 도구로 사용됩니다. 다만 맵에서 멀리 떨어진 클러스터 사이의 거리는 의미가 거의 없습니다. 오토인코더는 각 입력을 작은 잠재 공간 코드로 매핑하는 인코더와 입력을 재구성하는 디코더를 학습합니다. 2006년에 Geoffrey Hinton과 Ruslan Salakhutdinov는 딥 오토인코더가 이미지와 문서에서 PCA보다 나은 코드를 생성한다는 사실을 보였습니다.
이 예제에서는 8x8 숫자 이미지를 64개의 픽셀 특징에서 분산의 90%를 유지하는 최소 주성분 수로 압축한 다음, k-최근접 이웃을 사용해 압축 전후의 숫자를 분류합니다:
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
X, y = load_digits(return_X_y=True) # 1,797 images of 8x8 pixels = 64 features
# Keep the fewest principal components that explain 90% of the variance
pca = PCA(n_components=0.90).fit(X)
print(f"Features: {X.shape[1]} -> {pca.n_components_}")
# Classify with k-nearest neighbors on the raw pixels and on the reduced features
raw = cross_val_score(KNeighborsClassifier(), X, y).mean()
reduced = cross_val_score(make_pipeline(PCA(n_components=0.90), KNeighborsClassifier()), X, y).mean()
print(f"Accuracy: {raw:.3f} with 64 features, {reduced:.3f} with {pca.n_components_}")21개의 성분이 분산의 90%를 보존하며, 특징 수를 3분의 1로 줄여도 교차 검증 정확도는 0.963에서 0.959로만 낮아집니다. 파이프라인 안에서 PCA를 피팅하면 각 학습 폴드만으로 투영을 학습하므로 테스트 폴드의 정보가 누출되지 않습니다.
특징 선택과 특징 추출#
특징 선택은 중복 센서 채널을 제거하는 것처럼 원래 열의 일부를 유지하므로, 남은 특징의 의미가 그대로 보존됩니다. 좁은 의미의 차원 축소는 특징 추출로, 기존 특징을 조합해 새로운 특징을 생성하며 보통 압축률은 높지만 해석하기는 더 어렵습니다. 두 방법 모두 데이터 전처리와 특징 엔지니어링의 단계입니다. 딥 네트워크는 학습의 일부로 픽셀을 임베딩으로 압축해 특징을 추출하며, 마트료시카 표현 학습은 앞부분의 차원만으로도 작동하는 임베딩을 학습하므로 벡터 데이터베이스에 더 짧은 벡터를 저장할 수 있습니다.
컴퓨터 비전에서의 활용#
컴퓨터 비전은 여러 단계에서 축소된 표현을 활용합니다. 이미지 임베딩을 t-SNE 또는 UMAP으로 2D에 투영하면 클래스가 분리되는지와 이상치가 어디에 있는지 확인할 수 있으며, PCA 또는 벡터 양자화는 벡터 검색에 사용되는 임베딩을 압축해 수백만 장의 이미지를 메모리에 저장할 수 있게 합니다. YOLO26 인스턴스 분할 모델은 이 개념을 출력에 적용합니다. 헤드는 이미지마다 입력 해상도의 4분의 1 크기로 프로토타입 마스크 32개를 계산하고 객체마다 계수 32개만 예측합니다. 각 객체의 마스크는 프로토타입의 가중합이므로, 입력이 640픽셀일 때 160x160 마스크의 값 25,600개를 숫자 32개로 인코딩합니다.










