내재 차원

Python으로 배우는 Unsupervised Learning

Benjamin Wilson

Director of Research at lateral.io

비행 경로의 내재 차원

  • 2개 특성: 비행 경로상의 위도, 경도
  • 데이터셋은 겉보기엔 2차원
  • 그러나 하나의 특성(경로를 따른 변위)으로 근사 가능
  • 본질적으로 1차원
latitude  longitude
  50.529     41.513
  50.360     41.672
  50.196     41.835
...

경도 대 위도의 산점도

Python으로 배우는 Unsupervised Learning

내재 차원

  • 내재 차원 = 데이터셋 근사에 필요한 특성 수
  • 차원 축소의 핵심 아이디어
  • 샘플의 가장 압축된 표현은?
  • PCA로 탐지 가능
Python으로 배우는 Unsupervised Learning

버시컬러 데이터셋

  • "versicolor": 아이리스 종 중 하나
  • 특성 3개: 꽃받침 길이, 꽃받침 너비, 꽃잎 너비
  • 샘플은 3D 공간의 점들
Python으로 배우는 Unsupervised Learning

버시컬러의 내재 차원은 2

  • 샘플들이 평평한 2차원 면에 가깝게 놓임
  • 따라서 특성 2개로 근사 가능

버시컬러 점들의 3D 플롯: 꽃받침 길이 vs 꽃받침 너비 vs 꽃잎 너비

Python으로 배우는 Unsupervised Learning

PCA로 내재 차원 식별하기

  • 산점도는 특성이 2~3개일 때만 유효함
  • PCA는 특성이 몇 개든 내재 차원을 식별함
  • 내재 차원 = 분산이 유의한 PCA 특성의 개수
Python으로 배우는 Unsupervised Learning

버시컬러 샘플의 PCA

회전된 버시컬러 점들을 3D 공간에 표시: PC1 vs PC2 vs PC3

Python으로 배우는 Unsupervised Learning

PCA 특성은 분산 내림차순으로 정렬됨

막대그래프: PCA 특성 번호 vs 분산

Python으로 배우는 Unsupervised Learning

분산과 내재 차원

  • 내재 차원 = 분산이 유의한 PCA 특성의 개수
  • 이 예시에서는: 처음 두 PCA 특성
  • 따라서 내재 차원은 2

막대그래프: PCA 특성 번호 vs 분산, 1과 2 사이에 빨간 세로선

Python으로 배우는 Unsupervised Learning

PCA 특성의 분산 그리기

  • samples = 버시컬러 샘플 배열
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

pca = PCA()
pca.fit(samples)
PCA()
features = range(pca.n_components_)
Python으로 배우는 Unsupervised Learning

PCA 특성의 분산 그리기

plt.bar(features, pca.explained_variance_)
plt.xticks(features)
plt.ylabel('variance')
plt.xlabel('PCA feature')
plt.show()

막대그래프: PCA 특성 번호 vs 분산

Python으로 배우는 Unsupervised Learning

내재 차원은 모호할 수 있음

  • 내재 차원은 이상화 개념임
  • 항상 하나의 정답이 있는 것은 아님
  • 피에몬테 와인: 2, 3, 혹은 더 많다고 볼 수도 있음

와인 데이터셋의 PCA 특성 번호 vs 분산 막대그래프

Python으로 배우는 Unsupervised Learning

Let's practice!

Python으로 배우는 Unsupervised Learning

Preparing Video For Download...