데이터 분석/데이터 사이언스

데이터 사이언스 - 8. 비지도 학습 (Unsupervised Learning) (8.2 차원 축소 (Dimensionality Reduction))

개발_노트 2025. 3. 20. 17:04

8.2 차원 축소 (Dimensionality Reduction)

차원 축소(Dimensionality Reduction)는 고차원 데이터를 저차원으로 변환하는 기법으로,
데이터의 구조와 중요한 정보를 유지하면서 계산량을 줄이고 시각화가 가능하도록 도와준다.
고차원 데이터는 연산 속도 저하, 차원의 저주(Curse of Dimensionality), 과적합(overfitting) 문제를 유발할 수 있기 때문에,
적절한 차원 축소 기법을 활용하면 머신러닝 모델의 성능을 향상시킬 수 있다.

이 장에서는 대표적인 차원 축소 기법인 PCA(주성분 분석), t-SNE, UMAP을 다룬다.


8.2.1 PCA (주성분 분석, Principal Component Analysis)

1) PCA란?

  • 고차원 데이터를 저차원으로 변환하는 대표적인 차원 축소 기법
  • 데이터의 분산을 최대한 보존하면서 가장 중요한 방향(주성분, Principal Component)을 찾아 변환
  • 차원을 줄이면서도 데이터의 중요한 패턴을 유지

2) PCA 알고리즘 과정

  1. 데이터의 평균을 0으로 정규화(평균 제거)
  2. 공분산 행렬을 계산하여 변수 간의 관계를 분석
  3. 공분산 행렬의 고유값과 고유벡터를 계산하여 주요 방향(주성분) 결정
  4. 가장 큰 고유값을 가지는 주성분을 선택하여 데이터 차원 축소

📌 Python 코드 예제 (PCA 적용)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_digits

# 데이터 로드 (숫자 이미지 데이터)
digits = load_digits()
X = digits.data  # 64차원 데이터

# PCA 적용 (2차원으로 축소)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# 시각화
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=digits.target, cmap='viridis', alpha=0.6, edgecolors='k')
plt.colorbar(label="Digit Label")
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.title("PCA Projection of Digits Dataset")
plt.show()

PCA의 특징

  • 연산 속도가 빠름
  • 고차원의 분산을 최대한 유지
  • 데이터의 중요 정보를 유지하면서 차원 축소 가능
  • 선형 변환 기반이므로 비선형 데이터에는 한계가 있음

3) 주성분의 개수 선택 (누적 설명 분산 비율, Explained Variance Ratio)

PCA에서는 주성분의 개수를 선택할 때 전체 데이터의 분산을 얼마나 유지할 것인지를 고려해야 한다.
보통 설명 분산 비율(Explained Variance Ratio)이 95% 이상이면 충분하다고 본다.

📌 Python 코드 예제 (설명 분산 비율 확인)

# 누적 설명 분산 비율 계산
pca_full = PCA().fit(X)
explained_variance = np.cumsum(pca_full.explained_variance_ratio_)

# 시각화
plt.plot(range(1, len(explained_variance) + 1), explained_variance, marker='o')
plt.xlabel("Number of Principal Components")
plt.ylabel("Cumulative Explained Variance")
plt.title("Explained Variance Ratio by PCA Components")
plt.axhline(y=0.95, color='r', linestyle='--', label="95% Variance")
plt.legend()
plt.show()

설명 분산 비율 해석

  • 그래프에서 95% 설명 분산을 유지할 수 있는 최소 주성분 개수를 선택하면 최적의 차원 축소 가능

8.2.2 t-SNE (t-Distributed Stochastic Neighbor Embedding)

1) t-SNE란?

  • 비선형 데이터 구조를 저차원으로 효과적으로 축소하는 기법
  • 데이터의 지역적 구조(클러스터링 특성)를 유지하는 데 탁월
  • 고차원 데이터 시각화(2D, 3D)에서 자주 사용됨

2) t-SNE 알고리즘 과정

  1. 고차원 데이터의 유사도를 계산하여 인접한 데이터 포인트를 찾음
  2. 저차원 공간에서 비슷한 데이터는 가깝게, 다른 데이터는 멀게 배치
  3. 확률 분포 기반으로 데이터를 조정하여 최적의 표현을 생성

📌 Python 코드 예제 (t-SNE 적용)

from sklearn.manifold import TSNE

# t-SNE 적용 (2차원으로 축소)
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X)

# 시각화
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=digits.target, cmap='viridis', alpha=0.6, edgecolors='k')
plt.colorbar(label="Digit Label")
plt.xlabel("t-SNE Component 1")
plt.ylabel("t-SNE Component 2")
plt.title("t-SNE Projection of Digits Dataset")
plt.show()

t-SNE의 특징

  • 비선형 데이터의 군집 구조 시각화에 강력
  • 클러스터링 분석 및 패턴 인식에 효과적
  • 연산량이 많아 대규모 데이터에서는 속도가 느릴 수 있음

8.2.3 UMAP (Uniform Manifold Approximation and Projection)

1) UMAP이란?

  • t-SNE보다 빠르고 대규모 데이터에 효과적인 차원 축소 기법
  • 데이터의 전역적(Global) 및 지역적(Local) 구조를 모두 보존
  • 머신러닝 모델의 전처리 단계로도 활용 가능

2) UMAP 알고리즘 과정

  1. 데이터 간 거리(유클리디안, 맨해튼 등) 계산
  2. 저차원 공간에서 유사한 데이터는 가깝게, 다른 데이터는 멀게 배치
  3. 그래프 기반 최적화 기법을 사용하여 군집 구조 유지

📌 Python 코드 예제 (UMAP 적용)

import umap

# UMAP 적용 (2차원으로 축소)
umap_model = umap.UMAP(n_components=2, random_state=42)
X_umap = umap_model.fit_transform(X)

# 시각화
plt.scatter(X_umap[:, 0], X_umap[:, 1], c=digits.target, cmap='viridis', alpha=0.6, edgecolors='k')
plt.colorbar(label="Digit Label")
plt.xlabel("UMAP Component 1")
plt.ylabel("UMAP Component 2")
plt.title("UMAP Projection of Digits Dataset")
plt.show()

UMAP의 특징

  • t-SNE보다 빠르며, 대규모 데이터에서도 효과적
  • 군집 구조를 잘 유지하며 머신러닝 모델과 결합 가능
  • 하이퍼파라미터 튜닝이 필요 (n_neighbors, min_dist 등 조정 가능)

8.2.4 PCA vs t-SNE vs UMAP 비교

기법 특징 장점 단점
PCA 선형 차원 축소 연산 속도 빠름, 데이터의 분산 유지 비선형 데이터에는 한계
t-SNE 비선형 차원 축소 데이터의 지역적 구조 유지, 강력한 시각화 속도가 느림, 대규모 데이터에 부적합
UMAP 비선형 차원 축소 t-SNE보다 빠름, 전역 및 지역 구조 유지 하이퍼파라미터 튜닝 필요

언제 어떤 기법을 사용할까?

  • 고속 차원 축소 → PCA
  • 고차원 데이터 시각화 → t-SNE
  • 빠르고 대규모 데이터에 적합한 차원 축소 → UMAP

이러한 기법을 활용하면 고차원 데이터를 효과적으로 다룰 수 있다.