Post

R에서 umap-learn 사용하기 / 분명 설치했는데 없다고 나올때 해결법

Seurat RunUMAP()에서 uwot vs. umap-learn 차이

Seurat에서 UMAP(Uniform Manifold Approximation and Projection)을 생성할때 umap.method 파라미터로 어떤 implementation을 사용할건지 고를 수 있는데, 다음과 같이 3가지를 제공한다.

  • uwot
    Runs umap via the uwot R package
  • uwot-learn
    Runs umap via the uwot R package and return the learned umap model
  • umap-learn
    Run the Seurat wrapper of the python umap-learn package

대충쓰여있는 설명에서도 알 수 있듯이, uwot은 R-based고 umap-learn은 python-based 다. 언어의 차이가 가장 크고 UMAP을 생성하는 원리은 수학적 이론상으로 동일하다.

그렇다면 왜 2가지로 나눠놨는가? 이건 seurat github issues에서 확인할 수 있었는데..1 Seurat을 R package로 제작하면서 umap을 R로 구현하는 uwot을 사용하는것이 결과와 런타임 측면에서 쓸만하다는 결론을 얻어서 default를 uwot로 했다. + python package를 R에서 사용할때 연동문제 때문에 많은 사람들이 문제가 있었어서. 그냥 uwot은 재현성 문제가 있어서 이런 부분 해결할 수 있게 옵션(uwot-learn)을 추가했다

그래서 결론은 uwot을 쓰나 umap-learn을 쓰나 상관이 없다. 하지만 둘의 결과가 동일하다고 장담할 순 없다.

learned umap model을 반환받는것은 왜 중요한가?
중요하진 않지. 옵션일 뿐이지만. 효율성과 consistency를 위한것. 이렇게 umap 학습 데이터(고차원 데이터를 저차원으로 매핑하는 과정에서 학습된 매개변수와 구조를 포함)를 함께 받으면 추후 동일 모델을 사용해 새로운 데이터에 대해 변환을 적용할 때 유용하다. 이렇게 얻은 모델을 새로운 데이터에 대해 동일한 차원 축소 과정을 적용할 때 사용될 수 있다. 즉, 한 번 학습을 마친 후, 학습된 모델을 저장하고, 이후에 동일한 데이터 구조를 가진 새로운 데이터 세트에 적용하여 빠르게 결과를 얻을 수 있게하는것.
python(umap-learn) 이냐 R(uwot)이냐
이건 preference의 문제라고 생각함. uwot-learn이 없을땐 모델을 추가로 받아서 재현성을 갖는 umap-learn이 좀 더 장점을 갖고 있었다고 하면, 이젠 거의 차이가 없으니까. 약간의 장점이라고 하면 umap-learn 사용자층이 좀 더 두터워서 좀 더 자주 update된다는점? 단점은 R에서 Python 패키지를 사용하는데 있어 reticulate같은 연결패키지 설정을 해줘야한다는 점.

How to use umap-learn

앞서 말했듯이 umap-learn은 python package라 python 설치는 필수적이고, 설치된 library 위치도 파악해둬야함. python 설치하면서 pip도 설치하기!

Installation in bash

1
2
pip install umap-learn
pip show umap-learn #설치 확인

Installation in R

R내에서도 reticulate 패키지를 사용하면 umap-learn을 설치할 수 있다. 젤 첨에 python path 설정하는걸 잊지말자.

1
2
3
4
5
library(reticulate)
use_python("//source/Python-3.11.6/bin/python3", required = TRUE)

reticulate::py_install(packages ='umap-learn') 
py_module_available("umap") #설치 확인 

Usage in RunUMAP from Seurat

1
    celltype.obj <- RunUMAP(celltype.obj, dims = 1:10,umap.method = "umap-learn")

This post is licensed under CC BY 4.0 by the author.

© Subin Cho. Some rights reserved.

Using the Chirpy theme for Jekyll.