我正在尝试使用核密度估计方法获取观察到的概率密度。这是我使用kde的方式:
from sklearn.neighbors import KernelDensity
kde = KernelDensity().fit(sample)
问题在于,当我尝试获取每个点的概率密度时。
kde_result = kde.score_samples(sample)
速度非常慢,如何提高速度?
样本由300,000(x,y)
个点组成。
我正在尝试使用核密度估计方法获取观察到的概率密度。这是我使用kde的方式:
from sklearn.neighbors import KernelDensity
kde = KernelDensity().fit(sample)
kde_result = kde.score_samples(sample)
速度非常慢,如何提高速度?
样本由300,000(x,y)
个点组成。
如果有人在寻找这个问题的答案,可以在这里找到解决方案。在那里,他们介绍了您可以使用multiprocessing轻松并行计算来加速执行。
这段代码可以完成任务(也来自相同的答案):
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)
atol
和/或rtol
来初始化KernelDensity()
。 - Chrisinit
(创建kde
)的速度还可以。令人困扰的是在查询大型数据集时的score_sample
方法。 - ZK Zhao创建一个预测PDF
,怎么做呢?通过最小化预测和观察到的PDF之间的均方误差
来实现,即(预测-观察)**2
。这就是为什么我需要观察到的PDF,即kde
。 - ZK Zhao