2차원 지도를 위한 t-SNE

Python으로 배우는 Unsupervised Learning

Benjamin Wilson

Director of Research at lateral.io

2차원 지도를 위한 t-SNE

  • t-SNE = "t-분포 확률적 이웃 임베딩"
  • 샘플을 2D(또는 3D)로 매핑
  • 샘플 간 근접성을 대략 보존
  • 데이터셋 탐색에 유용
Python으로 배우는 Unsupervised Learning

아이리스 데이터셋의 t-SNE

  • 아이리스 데이터는 측정값 4개 → 샘플은 4차원
  • t-SNE가 샘플을 2D로 매핑
  • 서로 다른 종을 모른 채 수행
  • 그래도 종을 대부분 분리함

아이리스 데이터셋에 t-SNE를 적용한 산점도

Python으로 배우는 Unsupervised Learning

t-SNE 산점도 해석

  • "versicolor"와 "virginica"는 서로 구분이 더 어려움
  • k-평균 관성 플롯과 일치: 2개 또는 3개 군집 주장 가능

아이리스 데이터셋에 t-SNE를 적용한 산점도

Python으로 배우는 Unsupervised Learning

sklearn에서의 t-SNE

  • 2D NumPy 배열 samples
print(samples)
[[ 5.   3.3  1.4  0.2]
 [ 5.   3.5  1.3  0.3]
 [ 4.9  2.4  3.3  1. ]
 [ 6.3  2.8  5.1  1.5]
 ...
 [ 4.9  3.1  1.5  0.1]]
  • 정수 레이블(0, 1, 2)로 된 종 목록 species
print(species)
[0, 0, 1, 2, ..., 0]
Python으로 배우는 Unsupervised Learning

sklearn에서의 t-SNE

import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
model = TSNE(learning_rate=100)

transformed = model.fit_transform(samples) xs = transformed[:,0] ys = transformed[:,1] plt.scatter(xs, ys, c=species) plt.show()

아이리스 데이터셋에 t-SNE를 적용한 산점도

Python으로 배우는 Unsupervised Learning

t-SNE에는 fit_transform()만 있음

  • fit_transform() 메서드만 있음
  • 모델을 학습하고 데이터를 동시에 변환
  • 별도의 fit()/transform() 없음
  • 새 샘플로 지도를 확장할 수 없음
  • 매번 처음부터 다시 해야 함!
Python으로 배우는 Unsupervised Learning

t-SNE 학습률

  • 데이터셋에 맞는 학습률을 선택
  • 잘못 고르면 점이 뭉침
  • 50~200 사이를 시도
Python으로 배우는 Unsupervised Learning

매번 달라짐

  • t-SNE 결과는 실행마다 달라짐
  • 피에몬테 와인: 3회 실행, 산점도도 3가지!
  • 그러나: 품종(=색상)의 상대적 위치는 유사함

 

와인 데이터셋에 t-SNE를 3번 적용한 산점도 3개

Python으로 배우는 Unsupervised Learning

연습해 봅시다!

Python으로 배우는 Unsupervised Learning

Preparing Video For Download...