본문 바로가기
인공지능(AI)/머신러닝

[핸즈온 머신러닝] 8장 차원 축소

by hyezzisss 2022. 1. 24.
  • 훈련 속도를 높임
  • 데이터 시각화에 유용

차원 축소에 사용되는 두 가지 주요 접근 방법 : 투영, 매니폴드 학습

인기 있는 차원 축소 기법 : PCA, 커널 PCA, LLE

1. 차원의 저주


  • 훈련 세트의 차원이 클수록 과대적합 위험이 커짐
  • 해결책 중 하나로 훈련 샘플의 밀도가 충분히 높아질 때까지 훈련 세트의 크기를 키우기
    • 그러나 기하 급수적으로 늘어날 수 있음

2. 차원 축소를 위한 접근 방법


1) 투영

  • 대부분의 문제는 모든 차원에 걸쳐 균일하게 퍼져있지 않음
    • 모든 훈련샘플이 고차원 공간 안의 저차원 부분 공간에 놓여 있음
  • 차원 축소에 있어서 투영이 언제나 최선의 방법은 아님
    • 스위스 롤 데이터셋처럼 부분 공간이 뒤틀리거나 휘어 있기도 함

2) 매니폴드 학습

  • d차원 매니폴드는 국부적으로 d차원 초평면으로 보일 수 있는 n차원 공간의 일부
  • 많은 차원 축소 학습 알고리즘이 훈련 샘플이 놓여 있는 매니폴드를 모델링하는 식으로 작동
  • 실제 고차원 데이터셋이 더 낮은 저차원 매니폴드에 가깝게 놓여 있다는 매니폴드 가정 또는 매니폴드 가설에 근거
  • 모델 훈련 전 훈련 세트의 차원을 감소시키면 훈련 속도는 빨라지지만 항상 더 낫거나 간단한 솔루션이 되는 것은 아님

3. PCA


  • 주성분 분석은 가장 인기 있는 차원 축소 알고리즘
  • 데이터에 가장 가까운 초평면을 정의한 다음 데이터를 이 평면에 투영시킴

1) 분산 보존

  • 분산이 최대로 보존되는 축을 선택하는 것이 정보가 가장 적게 손실되므로 합리적
  • 즉 원본 데이터셋과 투영된 것 사이의 평균 제곱 거리를 최소화 하는 축

2) 주성분

  • PCA는 훈련 세트에서 분산이 최대인 축을 찾음
  • 또한 첫 번째 축에 직교하고 남은 분산을 최대한 보존하는 두 번째 축을 찾음

3) 사이킷런 사용하기

# 데이터셋의 차원 2로 줄이기
from sklearn.decomposition import PCA

pca = PCA(n_components = 2)
X2D = pca.fit_transform(X)​

# 설명된 분산의 비율
pca.explained_variance_ratio_

4) 적절한 차원 수 선택하기

  • 차원 수를 임의로 정하기보다는 충분한 분산이 될 때까지 더해야 할 차원의 수를 선택하는 것이 간단
  • 데이터 시각화를 위해 축소하는 경우에는 2, 3개로 줄이는 것이 일반적
pca = PCA(n_components=0.95)
X_reduced = pca.fit_transform(X_train)

5) 압축을 위한 PCA

  • 원본 데이터와 재구성된 데이터 사이의 평균 제곱 거리를 재구성 오차라고 함
# MNIST 데이터셋을 154차원으로 압축하고 784차원으로 복원
pca = PCA(n_components = 154)
X_reduced = pca.fit_transform(X_train)
X_recovered = pca.inverse_transform(X_reduced)

6) 점진적 PCA

  • PCA 구현 문제인 SVD 알고리즘을 실행하기 위해 전체 훈련 세트를 메모리에 올려야 한다는 것을 해결
  • 사이킷런의 IncrementalPCA 이용

4. 커널 PCA


  • 차원 축소를 위한 복잡한 비선형 투영 수행
  • 투영된 후에 샘플의 군집을 유지하거나 꼬인 매니폴드에 가까운 데이터셋을 펼칠 때 유용
# KernelPCA를 이용해 RBF 커널로 kPCA 적용
from sklearn.decomposition import KernelPCA

rbf_pca = KernelPCA(n_components=2, kernel="rbf", gamma=0.04)
X_reduced = rbf_pca.fit_transform(X)

1) 커널 선택과 하이퍼파라미터 튜닝

  • kPCA는 비지도 학습으로 좋은 커널과 하이퍼파라미터를 선택하기 위한 명확한 성능 측정 기준이 없음
  • 그리드 탐색을 사용

5. LLE


  • 지역 선형 임베딩(LLE)은 또 다른 강력한 비선형 차원 축소 기술
  • 투영에 의존하지 않는 매니폴드 학습
    • 먼저 훈련 샘플이 가장 가까운 이웃에 얼마나 선형적으로 연관되어 있는지 측정
    • 국부적인 관계가 가장 잘 보존되는 훈련 세트의 저차원 표현을 찾음
  • 잡음이 너무 많지 않은 경우 꼬인 매니폴드를 펼치는데 잘 작동
from sklearn.manifold import LocallyLinearEmbedding

lle = LocallyLinearEmbedding(n_components=2, n_neighbors=10)
X_reduced = lle.fit_transform(X)

6. 다른 차원 축소 기법


  • 랜덤 투영
  • 다차원 스케일링 : 샘플 간 거리를 보존하면서 차원 축소
  • lsomap
  • t-SNE
  • 선형 판별 분석

 

댓글