Я пытаюсь написать код, который выполняет выборку идентификаторов метрополии, и у меня возникают проблемы с вычислением производной второго порядка функции по отношению к numpy ndarray
. Код, который я написал до сих пор, показан ниже:
import numpy as np
from scipy.optimize import newton
w = np.array([4,5,3,6,2])
y = np.array([1,0,0,1,1])
lamb = np.array([0.001, 0.0045, 0.0072,0.0083, 0.0069)]
tau = np.array([0.0002, 0.00045, 0.000378, 0.00467, 0.00235])
# define function f
def f(gamma):
return (-1) * (np.dot(y, np.dot(w, gamma)) - np.sum(np.log(np.exp(np.dot(w,gamma)) + 1)) - np.sum((np.subtract(gamma,lamb)) * (np.subtract(gamma,lamb)) / (2*tau*tau)))
# mode for the metropolized iid sampler
gamma_hat = newton(f, gamma, fprime=None, args=(), tol=1.48e-08, maxiter=50, fprime2=None)
# not sure how to calculate the variance for the same sampler
Что я хочу сделать:
Чтобы вычислить дисперсию для сэмплера, я хочу взять производную второго порядка от функция f
по отношению к векторной переменной gamma
, а затем вычислить значение второй производной после замены gamma = gamma_hat
.
Могу я сделать это в python? При необходимости я готов использовать pytorch
для вычисления значения производной второго порядка.
Спасибо,