我试图使用核密度估计获得观察到的概率密度。下面是我使用kde的方法:
from sklearn.neighbors import KernelDensity
kde = KernelDensity().fit(sample)
问题是,当我试图得到每个点
的概率密度时kde_result = kde.score_samples(sample)
速度非常慢。我怎样才能加快速度呢?
样本由300,000 (x,y)
点组成。
如果有人正在寻找这个问题的答案,这里就解决了。这里描述了你可以很容易地通过多处理并行化计算来加速执行。
这段代码将完成这项工作(也来自相同的答案):
import numpy as np
import multiprocessing
from sklearn.neighbors import KernelDensity
def parrallel_score_samples(kde, samples, thread_count=int(0.875 * multiprocessing.cpu_count())):
with multiprocessing.Pool(thread_count) as p:
return np.concatenate(p.map(kde.score_samples, np.array_split(samples, thread_count)))
kde = KernelDensity(bandwidth=2.0,atol=0.0005,rtol=0.01).fit(sample)
kde_result = parrallel_score_samples(kde, sample)