Пример #1
0
 def diagonal_hessian_log_partition(self, eta):
     base_log_partition = self.base_model.log_partition(eta[1:])
     exp_base_log_partition = safe_exp(base_log_partition)
     exp_x0 = safe_exp(eta[0])
     exp_sum = safe_exp(eta[0] + base_log_partition)
     sum_exp = exp_base_log_partition + exp_x0
     sq_sum_exp = safe_sq(sum_exp)
     diag_hess_base = self.base_model.diagonal_hessian_log_partition(eta[1:])
     sq_grad_base = safe_sq(self.base_model.grad_log_partition(eta[1:]))
     numerator = np.zeros(diag_hess_base.shape)
     numerator[:,sq_sum_exp != np.inf] = (sum_exp[sq_sum_exp != np.inf] * diag_hess_base[:, sq_sum_exp != np.inf] + exp_x0[sq_sum_exp != np.inf] * sq_grad_base[:, sq_sum_exp != np.inf]) / sq_sum_exp[sq_sum_exp != np.inf]
     return np.concatenate(((exp_sum / sq_sum_exp)[:,np.newaxis].T,
                             exp_base_log_partition * numerator), axis=0)
Пример #2
0
 def diagonal_hessian_log_partition(self, eta):
     base_log_partition = self.base_model.log_partition(eta[1:])
     exp_base_log_partition = safe_exp(base_log_partition)
     exp_x0 = safe_exp(eta[0])
     exp_sum = safe_exp(eta[0] + base_log_partition)
     sum_exp = exp_base_log_partition + exp_x0
     sq_sum_exp = safe_sq(sum_exp)
     diag_hess_base = self.base_model.diagonal_hessian_log_partition(
         eta[1:])
     sq_grad_base = safe_sq(self.base_model.grad_log_partition(eta[1:]))
     numerator = np.zeros(diag_hess_base.shape)
     numerator[:, sq_sum_exp != np.inf] = (
         sum_exp[sq_sum_exp != np.inf] *
         diag_hess_base[:, sq_sum_exp != np.inf] +
         exp_x0[sq_sum_exp != np.inf] *
         sq_grad_base[:, sq_sum_exp != np.inf]
     ) / sq_sum_exp[sq_sum_exp != np.inf]
     return np.concatenate(((exp_sum / sq_sum_exp)[:, np.newaxis].T,
                            exp_base_log_partition * numerator),
                           axis=0)
Пример #3
0
 def hessian_log_partition(self, eta):
     return np.array([[-0.5 / eta[1], 0.5 * eta[0] / safe_sq(eta[1])],
                      [
                          0.5 * eta[0] / safe_sq(eta[1]),
                          (eta[1] - safe_sq(eta[0])) / (2 * eta[1]**3)
                      ]])
Пример #4
0
 def grad_log_partition(self, eta):
     return np.array([
         -0.5 * eta[0] / eta[1],
         (safe_sq(eta[0]) - 2 * eta[1]) / (4 * safe_sq(eta[1]))
     ])
Пример #5
0
 def log_partition(self, eta):
     return -safe_sq(eta[0]) / (4 * eta[1]) - 0.5 * np.log(-2 * eta[1])
Пример #6
0
 def sufficient_statistics(self, x):
     return np.array([x, safe_sq(x)]).T
Пример #7
0
 def diagonal_hessian_log_partition(self, eta):
     return np.array(
         [polygamma(1, eta[0] + 1), (eta[0] + 1) / safe_sq(eta[1])])
Пример #8
0
 def hessian_log_partition(self, eta):
     return np.array([[polygamma(1, eta[0] + 1), -1.0 / eta[1]],
                      [-1.0 / eta[1], (eta[0] + 1) / safe_sq(eta[1])]])
Пример #9
0
 def diagonal_hessian_log_partition(self, eta):
     return np.array([polygamma(1, eta[0] + 1), (eta[0] + 1) / safe_sq(eta[1])])
Пример #10
0
 def hessian_log_partition(self, eta):
     exp_eta = safe_exp(eta)
     return -exp_eta / safe_sq(exp_eta + 1)
Пример #11
0
 def diagonal_hessian_log_partition(self, eta):
     return np.array([-0.5 / eta[1], (eta[1] - safe_sq(eta[0])) / (2*eta[1]**3)])
Пример #12
0
 def hessian_log_partition(self, eta):
     return np.array([[-0.5 / eta[1],0.5 * eta[0] / safe_sq(eta[1])],
                      [0.5 * eta[0] / safe_sq(eta[1]),(eta[1] - safe_sq(eta[0])) / (2*eta[1]**3)]])
Пример #13
0
 def grad_log_partition(self, eta):
     return np.array([-0.5 * eta[0] / eta[1], (safe_sq(eta[0]) - 2*eta[1]) / (4 * safe_sq(eta[1]))])
Пример #14
0
 def log_partition(self, eta):
     return -safe_sq(eta[0]) / (4*eta[1]) - 0.5 * np.log(-2 * eta[1])
Пример #15
0
 def sufficient_statistics(self, x):
     return np.array([x, safe_sq(x)]).T
Пример #16
0
 def diagonal_hessian_log_partition(self, eta):
     return np.array(
         [-0.5 / eta[1], (eta[1] - safe_sq(eta[0])) / (2 * eta[1]**3)])
Пример #17
0
 def hessian_log_partition(self, eta):
     exp_eta = safe_exp(eta)
     return -exp_eta / safe_sq(exp_eta + 1)
Пример #18
0
 def hessian_log_partition(self, eta):
     return np.array([[polygamma(1, eta[0] + 1), -1.0 / eta[1]],
                      [-1.0 / eta[1], (eta[0] + 1) / safe_sq(eta[1])]])