최신 차원 압축 방법 "UMAP"정보

소개



안녕하세요!
여러분 차원 압축 수법이라고 하면 어떤 것을 생각해 봅니까?
PCA, Isomap, t-SNE 등입니다.
이 기사가 매우 잘 정리되어 있습니다.
고차원 데이터의 차원 축소 및 2차원 플롯 기법

오늘 소개하고 싶은 것은 UMAP이라는 차원 삭감 방법입니다.
논문이 arXiv에 2018년 2월 9일에 오른 방금의 기법입니다.
무려 t-SNE와 같은 정도의 차원 삭감을 몇 배의 속도로 할 수 있습니다.
논문에 대해서는, 리만 기하학과 대수 토폴로지를 배경으로 되어 있는 것 같기 때문에 차분히 읽어내고 나중에 정리하고 싶습니다.
흥미가 있는 분은 이쪽으로부터 부디
UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction

사용해 보자.



얼마나 빨리 도서관이 공개되었습니다.
일단 사용해 봅시다.

설치


pip3 install umap-learn

사용법은 기본적으로 scikit-learn과 동일합니다.
MNIST를 사용하여 t-SNE와 비교해 보았습니다.
t-SNE에 의한 멋있는 차원 압축 및 시각화

공식 GitHub에는 써 있습니다만,
from scipy.sparse.csgraph import connected_components

쓰지 않으면 오류가 발생합니다.

reduction.py
import umap
from sklearn.datasets import load_digits
from scipy.sparse.csgraph import connected_components
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from sklearn.manifold import TSNE
import time

def main():
    digits = load_digits()
    digits.target = [float(digits.target[i]) for i in range(len(digits.target))]

    # UMAP
    start_time = time.time()
    embedding = umap.UMAP().fit_transform(digits.data)
    interval = time.time() - start_time
    plt.scatter(embedding[:,0],embedding[:,1],c=digits.target,cmap=cm.tab10)
    plt.colorbar()
    plt.savefig('umap.png')

    # t-SNE
    plt.clf()
    start_time2 = time.time()
    tsne_model = TSNE(n_components=2)
    tsne = tsne_model.fit_transform(digits.data)
    interval2 = time.time() - start_time2
    plt.scatter(tsne[:,0],tsne[:,1],c=digits.target,cmap=cm.tab10)
    plt.colorbar()
    plt.savefig('tsne.png')

    print('umap : {}s'.format(interval))
    print('tsne : {}s'.format(interval2))

if __name__ == "__main__":
    main()

출력 결과가 여기입니다.
t-SNE

UMAP


UMAP 쪽이 보다 분명하게 나뉘어져 있는 인상이군요.

놀랍게도 실행 시간의 차이입니다.
umap : 5.383596897125244s
tsne : 34.21198582649231s

무려 나의 출력 결과에서는 6배 이상의 속도를 계측했습니다.

매우 흥미 롭습니다.
수학 복습을 하면서 논문을 읽고 해설 기사를 갱신하고 싶습니다.

좋은 웹페이지 즐겨찾기