2017-12-11 1 views
0

꽤 큰 2 차원 데이터 세트의 커널 밀도 추정치를 colour the points in a scatter plot으로 계산하려고합니다. 함수 scipy.stats.gaussian_kde은 오랜 시간이 걸리므로 결과를 빨리 얻기 위해 dask (v0.15.2)를 사용할 수 있다고 생각했습니다. 그러나 내 접근 방식이 실제로 어떤 속도 향상을 얻는 지 확신 할 수 없습니다.커널 밀도 추정을 계산하기 위해 dask.bag.from_sequence 사용

import numpy as np 
from scipy.stats import gaussian_kde 
import dask.bag as db 

xy = np.random.rand(2, 1000000) 
kde = gaussian_kde(xy) 

chunker = (xy[:, i:i+10000] for i in range(100)) 

compute_job = db.from_sequence(chunker).map(kde) 

results = compute_job.compute() 
z = np.hstack(results) 

이 2,677,920 좌표 쌍들의 세트와 쿼드 코어 제온 E5-2609 @ 2.4Hz에서 완료 60hrs을 인계 : 여기 일례이다. 제대로 사용 했나요?

답변

0

불행히도 Dask는 모든 경우에 속도 향상을 제공하지 않습니다. 사실 입력 덩어리 중 하나만 사용하여 KDE를 수행한다면 이미 다중 코어를 사용하고 있으므로 Dask에는 예비 용량이 없습니다.

크기가 2x1000000 인 커널로 KDE (컨볼 루션과 같은)를 수행하는 것이 현명하지 않은 것처럼 보입니다. 매우 오래 걸리는 것에 놀라지 않습니다. 네가하고 싶은게이게 확실한거야?

또한 datashader을 사용하는 것이 좋습니다.이 마스크는 Dask 배열로 청크 방식으로 작동하며 멋진 흐림 효과 파이프 라인 요소를 포함합니다.

+0

답장을 보내 주셔서 감사합니다. KDE를 계산하려는 이유는 산점도를 색칠하기 위해서입니다. datashader를 사용할 것이지만, 불행히도 아직 matplotlib에서 완전히 지원되지는 않습니다. (https://github.com/bokeh/datashader/pull/200). – Pablo

+0

당신이 어떤 종류의 KDE를 원한다는 것에 의문을 품고 있지 않다. 나는 당신이 당신의 데이터 덩어리보다 훨씬 큰 커널을 가지고 그것을 계산하기를 원한다고 질문하고있다. 당신은 근본적으로 흐리게하는 [hexbin] (https://matplotlib.org/examples/pylab_examples/hexbin_demo.html)만을하고 있습니다. – mdurant

+0

나는 기본 통계를 거의 이해하지 않고 맹목적으로 [recipe] (https://stackoverflow.com/a/20107592/1534504)를 따르고 있음을 인정해야합니다. 나는 동의한다, hexbin은이 양의 데이터를위한 더 적절한 해결책이다. 지도 해줘서 고마워. – Pablo

관련 문제