Многомерный для одномерной выборки с использованием оценки плотности ядра в Python - PullRequest
0 голосов
/ 27 февраля 2020

У меня такой вопрос: я использую функцию SciPy gaussian_kde для генерации многомерных PDF данных (в моем случае, трехмерных данных). Я хотел бы иметь возможность ввести координаты x и ay, а затем повторно выполнить выборку из 1D PDF в z на этом этапе. Однако создается впечатление, что повторная выборка не принимает аргументов координат и поэтому не может использоваться в этом отношении, а вместо этого может только повторно выбирать трехмерную точку из данных. Я нашел обходной путь, используя numpy .random.choice с весами, заданными 1D PDF, как рассчитано на сетке. Используя данные этого примера , я получаю следующее:

import numpy as np
from scipy import stats
mu=np.array([1,10,20])
sigma=np.matrix([[20,10,10],[10,25,1],[10,1,50]])

data = np.random.multivariate_normal(mu, sigma, 1000)

z_min = np.amin(data)
z_max = np.amax(data)
values = data.T

kernel = stats.gaussian_kde(values)

grid_size = 10000
z_grid = np.linspace(z_min,z_max,grid_size)
dz = (z_max-z_min)/grid_size
points = np.array([10*np.ones(len(z_grid)),0*np.ones(len(z_grid)),z_grid])
probabilities = kernel(points)

total_probability = np.sum(probabilities)
total_probability2 = np.sum(probabilities*dz)

resampled2 = np.random.choice(z_grid, p=probabilities/total_probability, size=1000000)

fig = plt.figure()
plt.hist(resampled2,normed = True, alpha = 0.5,bins=1000)
plt.plot(z_grid,probabilities/total_probability2)
plt.show()

, которое дает это распределение в z , с mu = 10 и sigma = 0. Точки с передискретизацией подходят хорошо, но любое значение с передискретизацией ограничено, чтобы существовать на моем предопределенном z_grid, что создает гранулярность, которая мне не нравится. Кроме того, я подозреваю, что это может быть медленнее, чем использование возможного встроенного метода пересэмплирования в kde. Любые мысли будут с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...