Я использую функцию sklearn
KernelDensity
, чтобы оценить плотность, а затем оценить pdf в некоторых точках, используя функцию score_samples
, но значения, возвращаемые функцией score_samples
, намного больше 0, что не должно иметь место. потому что согласно документации он возвращает log(density)
[ Документация : массив оценок журнала (плотности). Они нормализованы, чтобы быть плотностями вероятности, поэтому значения будут низкими для многомерных данных.]
from sklearn.neighbors.kde import KernelDensity
import numpy as np
data = np.random.normal(0, 1, [50, 10]) #50 data points, dimension=10
data_kde = KernelDensity(kernel="gaussian", bandwidth=0.2).fit(data)
output = data_kde.score_samples(data)
#print(output)
output = array([19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645,
19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645,
19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645,
19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645,
19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645,
19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645,
19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645,
19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645,
19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645,
19.94484645, 19.94484645, 19.94484645, 19.94484645, 19.94484645])
Поскольку плотность лежит в [0, 1], log(density)
должен находиться между (-Inf, 0]
в отличие от 19.9448
, показанного выше.