コード例 #1
0
ファイル: kernel.py プロジェクト: RemiLehe/dragonfly
 def _child_gradient(self, param, X1, X2, param_num=None):
     """ Computes gradient of kernel w.r.t the param. """
     scaled_X1 = self.get_scaled_repr(X1)
     scaled_X2 = self.get_scaled_repr(X2)
     dist = np.sqrt(dist_squared(scaled_X1, scaled_X2))
     if param == 'scale':
         unnorm_kernel_vals = self._eval_kernel_values_unnormalised(dist)
         return self.hyperparams[
             'scale'] * self.norm_constant * unnorm_kernel_vals
     elif param == 'same_dim_bandwidths':
         dist_dv = -(dist / (self.hyperparams['dim_bandwidths'][0, 0]))
         unnorm_kernel_vals = self._eval_grad_kernel_values_unnormalised(
             dist, dist_dv)
         return self.hyperparams[
             'scale'] * self.norm_constant * unnorm_kernel_vals
     else:
         dim_X1 = np.expand_dims(scaled_X1[:, param_num], axis=1)
         dim_X2 = np.expand_dims(scaled_X2[:, param_num], axis=1)
         np.fill_diagonal(dist, 1.0)
         dist_dv = 1 / dist
         np.fill_diagonal(dist, 0.0)
         dim_sq = dist_squared(dim_X1, dim_X2)
         dist_dv *= -(dim_sq /
                      (self.hyperparams['dim_bandwidths'][0, param_num]))
         unnorm_kernel_vals = self._eval_grad_kernel_values_unnormalised(
             dist, dist_dv)
         return self.hyperparams[
             'scale'] * self.norm_constant * unnorm_kernel_vals
コード例 #2
0
 def _child_evaluate(self, X1, X2):
     """ Evaluates the SE kernel between X1 and X2 and returns the gram matrix. """
     scaled_X1 = self.get_scaled_repr(X1)
     scaled_X2 = self.get_scaled_repr(X2)
     dist_sq = dist_squared(scaled_X1, scaled_X2)
     K = self.hyperparams['scale'] * np.exp(-dist_sq / 2)
     return K
コード例 #3
0
ファイル: kernel.py プロジェクト: RemiLehe/dragonfly
 def _child_evaluate(self, X1, X2):
     """ Evaluates the SE kernel between X1 and X2 and returns the gram matrix. """
     scaled_X1 = self.get_scaled_repr(X1)
     scaled_X2 = self.get_scaled_repr(X2)
     dist = np.sqrt(dist_squared(scaled_X1, scaled_X2))
     unnorm_kernel_vals = self._eval_kernel_values_unnormalised(dist)
     K = self.hyperparams['scale'] * self.norm_constant * unnorm_kernel_vals
     return K
コード例 #4
0
ファイル: kernel.py プロジェクト: RemiLehe/dragonfly
 def _child_gradient(self, param, X1, X2, param_num=None):
     """ Computes gradient of kernel w.r.t the param """
     scaled_X1 = self.get_scaled_repr(X1)
     scaled_X2 = self.get_scaled_repr(X2)
     dist_sq = dist_squared(scaled_X1, scaled_X2)
     if param == 'scale':
         return self.hyperparams['scale'] * np.exp(-dist_sq / 2)
     elif param == 'same_dim_bandwidths':
         dist_sq_dv = dist_sq / (self.hyperparams['dim_bandwidths'][0, 0])
         return self.hyperparams['scale'] * (np.multiply(
             dist_sq_dv, np.exp(-dist_sq / 2)))
     else:
         dim_X1 = np.expand_dims(scaled_X1[:, param_num], axis=1)
         dim_X2 = np.expand_dims(scaled_X2[:, param_num], axis=1)
         dim_sq = dist_squared(dim_X1, dim_X2)
         dim_sq = dim_sq / (self.hyperparams['dim_bandwidths'][0,
                                                               param_num])
         return self.hyperparams['scale'] * (np.multiply(
             dim_sq, np.exp(-dist_sq / 2)))
コード例 #5
0
 def test_dist_squared(self):
     """ Tests the squared distance function. """
     self.report('dist_squared')
     comp_dist_sq = general_utils.dist_squared(self.X1, self.X2)
     assert (self.true_dist_sq == comp_dist_sq).all()