所以我一直在使用KDE一段时间,对于行大小为100,000或更大的数据集,它的速度非常慢。我一直在执行我的代码,如下所示:
def KernelFit(data):
# compute bandwidth
h = 1.06 * np.std(data)*data.shape[0]**(-1/5)
kde = KernelDensity(kernel='gaussian', bandwidth = h ).fit(data)
return np.exp(kde.score_samples(data))
我尝试使用以下多种处理并行化进程:
def ParallelKernel(data):
h = 1.06 * np.std(data)*data.shape[0]**(-1/5)
p = Pool()
target = data
func = partial(ProbFunction, h, data)
pdfvals = p.map(func,target)
return pdfvals
def ProbFunction( h, data, t):
ProbVal = 0
for i in range(data.shape[0]):
ProbVal += GaussKernel(t, data[i], h)
return ProbVal/data.shape[0]
def GaussKernel(t, x, h):
Value = np.exp(-1 * (t - x)**2 / h)
return Value
但是,多进程代码要慢20倍。谁能告诉我原因和方式?以及是否有更快的方法来处理这个问题?