Так что я некоторое время использую 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 раз медленнее.Может кто-нибудь сказать мне, почему и как?а есть ли более быстрые методы для обработки этого?