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)点组成。
以防万一有人正在寻找这个问题的答案,它在这里得到了解决。那里描述了您可以通过使用多处理并行计算来轻松地加快执行速度。
这段代码可以完成这项工作(也来自同一个答案):
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)