Scipy:加速内核密度估计的score_sample方法?

cqc*_*991 6 python statistics scipy scikit-learn

我正在尝试使用核密度估计来获取观察到的概率密度。这就是我使用 kde 的方式:

from sklearn.neighbors import KernelDensity
kde = KernelDensity().fit(sample)
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试获取每个点的概率密度时

kde_result = kde.score_samples(sample)
Run Code Online (Sandbox Code Playgroud)

速度很慢。我怎样才能加快速度?

样本由300,000 (x,y)点组成。

Rap*_*ael 3

以防万一有人正在寻找这个问题的答案,它在这里得到了解决。那里描述了您可以通过使用多处理并行计算来轻松地加快执行速度。

这段代码可以完成这项工作(也来自同一个答案):

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)
Run Code Online (Sandbox Code Playgroud)