Я пытаюсь использовать numpy и scipy для оценки плотности ядра 2D-модели гауссовой смеси и оценки градиентов KDE по отношению к координатам. Мой вопрос заключается в том, как оценить градиенты log KDE? Кажется, что возврат st.gaussian_kde()
не может использоваться для вычисления градиента? Любая помощь будет оценена по достоинству. Blew см. Код.Как оценить оценку плотности ядра 2D GMM и его градиентов?
import numpy as np
import matplotlib.pyplot as pl
import scipy.stats as st
data = np.random.multivariate_normal((0, 0), [[0.8, 0.05], [0.05, 0.7]], 100)
x = data[:, 0]
y = data[:, 1]
xmin, xmax = -3, 3
ymin, ymax = -3, 3
xx, yy = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([xx.ravel(), yy.ravel()])
values = np.vstack([x, y])
kernel = st.gaussian_kde(values)
f = np.reshape(kernel(positions).T, xx.shape)
Если я правильно понимаю [нумерованную документацию для градиента] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html), она принимает соседние значения в numpy массив и вычисляет градиент оттуда. Если OP нуждается в аналитическом градиенте, оцененном в произвольной точке, см. Мой ответ. – Raketenolli