У меня есть 1-D набор дискретных данных.На этом наборе я хочу выполнить оценку плотности ядра с помощью встроенной функции sklearn:
from sklearn.neighbors.kde import KernelDensity
data = ... # array of shape [5000, 1]
## perform kde with gaussian kernels
kde = KernelDensity(kernel='gaussian', bandwidth=0.8).fit(data.reshape(-1, 1))
С помощью метода экземпляра kde score_samples
я могу построить разумную оценку базовой плотностифункция:
## code for plot
X_plot = np.linspace(-5, 100, 10000)[:, np.newaxis]
log_dens = kde.score_samples(X_plot)
plt.plot(X_plot[:, 0], np.exp(log_dens))
Я хочу использовать это распределение для выполнения KS-теста для одной выборки.Я обнаружил, что Scipy уже реализует эту функциональность.Проверьте документацию здесь .В нем говорится:
scipy.stats.kstest (rvs, cdf, args = (), N = 20, альтернатива = 'двухсторонний', режим = 'приблизительно')
rvs: str, array или callable
Если строка, это должно быть имя дистрибутива в scipy.stats.Если это массив, то это должен быть одномерный массив наблюдений случайных величин.Если он вызывается, это должна быть функция для генерации случайных переменных;требуется ключевое слово аргумента size.
cdf: str или callable
Если строка, это должно быть имя дистрибутива в scipy.stats.Если rvs является строкой, то cdf может быть False или таким же, как rvs.Если вызывается, то этот вызываемый используется для вычисления cdf.
По сути, rvs - это новый пример данных, а cdf - накопительная функция распределения (интеграл от pdf).Я не смог выяснить, как получить доступ к функции, которая вычисляет pdf в sklearn, чтобы я мог интегрировать ее и передать в kstest.
Кто-нибудь знает, как туда попасть?Кроме того, если есть какие-либо альтернативы этому подходу, пожалуйста, дайте мне знать.