physbo.gp.lik.gauss のソースコード

# -*- coding:utf-8 -*-
import numpy as np
import scipy
#from scipy.stats import multivariate_normal

[ドキュメント]class gauss: ''' Gaussian likelihood function ''' def __init__( self, std = 1, max_params = 1e6, min_params = 1e-6 ): """ Parameters ---------- std: numpy.ndarray or float standard deviation. max_params: float The maximum value of the parameter. If the parameter is greater than this value, it will be replaced by this value. min_params: float The minimum value of the parameter. If the parameter is less than this value, it will be replaced by this value. """ self.min_params = np.log( min_params ) self.max_params = np.log( max_params ) self.num_params = 1 self.std = std self.params = np.log( std ) self.set_params( self.params )
[ドキュメント] def supp_params( self, params = None ): """ Set maximum (minimum) values for parameters when the parameter is greater(less) than this value. Parameters ---------- params: numpy.ndarray Parameters for optimization. Array of real elements of size (n,), where ‘n’ is the number of independent variables. Returns ------- """ if params is None: params = np.copy( params ) if params > self.max_params : params = self.max_params if params < self.min_params : params = self.min_params return params
[ドキュメント] def trans_params( self, params = None ): """ Get exp[params]. Parameters ---------- params: numpy.ndarray Parameters for optimization. Array of real elements of size (n,), where ‘n’ is the number of independent variables. Returns ------- std: numpy.ndarray """ if params is None: params = np.copy( self.params ) std = np.exp( params ) return std
[ドキュメント] def get_params_bound( self ): """ Get boundary array. Returns ------- bound: list A num_params-dimensional array with the tuple (min_params, max_params). """ bound = [ ( self.min_params, self.max_params ) for i in range(0, self.num_params) ] return bound
[ドキュメント] def get_cov( self, num_data, params = None ): """ Get a covariance matrix Parameters ---------- num_data: int params: numpy.ndarray Parameters for optimization. Array of real elements of size (n,), where ‘n’ is the number of independent variables. Returns ------- numpy.ndarray Diagonal element matrix of exp(2.0*params) """ std = self.trans_params( params ) var = std ** 2 return var * np.identity( num_data )
[ドキュメント] def get_grad( self, num_data, params = None ): """ Get a gradient matrix Parameters ---------- num_data: int params: numpy.ndarray Parameters for optimization. Array of real elements of size (n,), where ‘n’ is the number of independent variables. Returns ------- numpy.ndarray Diagonal element matrix of 2.0 * exp(2.0*params) """ std = self.trans_params( params ) var = std ** 2 return var * np.identity( num_data ) * 2
[ドキュメント] def set_params( self, params ): """ Set parameters. Parameters ---------- params: numpy.ndarray Parameters for optimization. Array of real elements of size (n,), where ‘n’ is the number of independent variables. Returns ------- """ self.params = self.supp_params( params ) self.std = self.trans_params( params )
[ドキュメント] def get_cand_params( self, t ): """ Getting candidate parameters. Parameters ---------- t: numpy.ndarray N dimensional array. The negative energy of each search candidate (value of the objective function to be optimized). Returns ------- numpy.ndarray log[ standard deviation of t] - log 10.0 """ return np.log( np.std(t) / 10 )
#[TODO] Check: This function seems not to be used.
[ドキュメント] def sampling( self, fmean): """ Sampling by adding noise Parameters ---------- fmean: numpy.ndarray Returns ------- """ num_data = fmean.shape[0] eps = self.std * np.random.randn( num_data ) return fmean + eps