거대한 데이터를 위해 파이썬에서 t-sne 구현 속도 향상


18

200 치수 ( doc2vec)를 가진 거의 백만 개의 벡터에서 차원 축소를하고 싶습니다 . 모듈 TSNE에서 구현을 사용 sklearn.manifold하고 있으며 주요 문제는 시간 복잡성입니다. 로도 method = barnes_hut계산 속도는 여전히 느립니다. 언젠가는 심지어 메모리가 부족합니다.

130G RAM의 48 코어 프로세서에서 실행 중입니다. 병렬로 실행하거나 많은 리소스를 사용하여 프로세스 속도를 높이는 방법이 있습니까?


Spark와 같은 프레임 워크에서 맵 축소를 시도 했습니까?
Dawny33

아니 .. 어떻게 작동하고 당신이 저를 지시 할 수 있습니다 ..
yazhi

경기 수는 통과 스파크의 설명서 :)을 이해하기위한
Dawny33

1
있는지 확인 스파크 구현이 작동합니다.
Emre

1
스파크를위한 스칼라입니다. 파이썬 구현을 원한다면 번역 할 수 있습니다. 스파크도 파이썬에서 실행됩니다.
Emre

답변:



7

FFT 가속 보간 기반 t-SNE ( paper , codePython package )를 확인하십시오.

초록에서 :

우리는 t-SNE의 계산을 극적으로 가속화하는 고속 푸리에 변환 가속 보간 기반 t-SNE (FIt-SNE)를 제시합니다. t-SNE의 가장 시간이 많이 걸리는 단계는 등거리 격자에 보간 한 다음 고속 푸리에 변환을 사용하여 회선을 수행하여 가속하는 회선입니다. 또한 멀티 스레드 근사치 인접 이웃을 사용하여 높은 차원에서 입력 유사도 계산을 최적화합니다.

이 백서에는 백만 개의 포인트와 100 개의 크기 (OP의 설정과 유사)가있는 데이터 세트의 예가 포함되어 있으며 ~ 1 시간이 소요됩니다.


5

SO에 대한 답변이 없으므로 github 페이지에서 나에게 물었고 GaelVaroquaux의 다음 회신을 말함으로써 문제가 종결되었습니다.

벡터 연산을 병렬화하고 싶다면 MKL로 컴파일 된 numpy 빌드를 사용해야합니다 (직접 시도하지 마십시오).

알고리즘 자체에 높은 수준의 병렬 처리에 대한 접근 방식이있을 수 있으며, 이로 인해 더 큰 이득을 얻을 수 있습니다. 그러나 코드를 간단히 살펴본 후에는 명확한 방법을 찾지 못했습니다.

이 문제는 푸른 하늘 위시리스트에 가깝기 때문에 계속 진행하겠습니다. 나는 TSNE이 더 빨리 가고 싶다는 것을 전적으로 동의하며, 병렬 처리가 쉬웠다는 것이 좋을 것입니다. 그러나 현재의 상황에서는 그러한 위시리스트를 처리 할 수있는 상태에 더 많은 작업이 필요합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.