chassis

Convenience functions for optimizing MuyGPyS.gp.muygps.MuyGPS objects

The functions optimize_from_indices() and optimize_from_tensors() wrap different optimization packages to provide a simple interface to optimize the hyperparameters of MuyGPS objects.

Currently, opt_method="scipy" wraps scipy.optimize.opt multiparameter optimization using L-BFGS-B algorithm using the objective function MuyGPyS.optimize.objective.loo_crossval().

Currently, opt_method="bayesian" (also accepts "bayes" and "bayes_opt") wraps bayes_opt.BayesianOptimization. Unlike the scipy version, BayesianOptimization can be meaningfully modified by several kwargs. MuyGPyS assigns reasonable defaults if no settings are passed by the user. See the BayesianOptimization documentation for details.

MuyGPyS.optimize.chassis.optimize_from_indices(muygps, batch_indices, batch_nn_indices, train_features, train_targets, loss_method='mse', obj_method='loo_crossval', opt_method='bayes', sigma_method='analytic', verbose=False, **kwargs)[source]

Find an optimal model directly from the data.

Use this method if you do not need to retain the distance matrices used for optimization.

See the following example, where we have already created a batch_indices vector and a batch_nn_indices matrix using MuyGPyS.neighbors.NN_Wrapper, and initialized a MuyGPyS.gp.muygps.MuyGPS model muygps.

Example

>>> from MuyGPyS.optimize.chassis import optimize_from_indices
>>> muygps = optimize_from_indices(
...         muygps,
...         batch_indices,
...         batch_nn_indices,
...         train_features,
...         train_features,
...         train_responses,
...         loss_method='mse',
...         obj_method='loo_crossval',
...         opt_method='scipy',
...         verbose=True,
... )
parameters to be optimized: ['nu']
bounds: [[0.1 1. ]]
sampled x0: [0.8858425]
optimizer results:
      fun: 0.4797763813693626
 hess_inv: <1x1 LbfgsInvHessProduct with dtype=float64>
      jac: array([-3.06976666e-06])
  message: b'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'
     nfev: 16
      nit: 5
     njev: 8
   status: 0
  success: True
        x: array([0.39963594])
Parameters
  • muygps (MuyGPS) – The model to be optimized.

  • batch_indices (ndarray) – A vector of integers of shape (batch_count,) identifying the training batch of observations to be approximated.

  • batch_nn_indices (ndarray) – A matrix of integers of shape (batch_count, nn_count) listing the nearest neighbor indices for all observations in the batch.

  • train_features (ndarray) – The full floating point training data matrix of shape (train_count, feature_count).

  • train_targets (ndarray) – A matrix of shape (train_count, feature_count) whose rows are vector-valued responses for each training element.

  • loss_method (str) – Indicates the loss function to be used.

  • obj_method (str) – Indicates the objective function to be minimized. Currently restricted to "loo_crossval".

  • opt_method (str) – Indicates the optimization method to be used. Currently restricted to "bayesian" (alternately "bayes" or "bayes_opt") and "scipy".

  • sigma_method (Optional[str]) – The optimization method to be employed to learn the sigma_sq hyperparameter.

  • verbose (bool) – If True, print debug messages.

  • kwargs – Additional keyword arguments to be passed to the wrapper optimizer.

Return type

MuyGPS

Returns

A new MuyGPs model whose specified hyperparameters have been optimized.

MuyGPyS.optimize.chassis.optimize_from_tensors(muygps, batch_targets, batch_nn_targets, crosswise_dists, pairwise_dists, loss_method='mse', obj_method='loo_crossval', opt_method='bayes', sigma_method='analytic', verbose=False, **kwargs)[source]

Find the optimal model using existing distance matrices.

Use this method if you need to retain the distance matrices used for later use.

See the following example, where we have already created a batch_indices vector and a batch_nn_indices matrix using MuyGPyS.neighbors.NN_Wrapper, a crosswise_dists matrix using MuyGPyS.gp.distance.crosswise_distances() and pairwise_dists using MuyGPyS.gp.distance.pairwise_distances(), and initialized a MuyGPyS.gp.muygps.MuyGPS model muygps.

Example

>>> from MuyGPyS.optimize.chassis import optimize_from_tensors
>>> muygps = optimize_from_tensors(
...         muygps,
...         batch_indices,
...         batch_nn_indices,
...         crosswise_dists,
...         pairwise_dists,
...         train_responses,
...         loss_method='mse',
...         obj_method='loo_crossval',
...         opt_method='scipy',
...         verbose=True,
... )
parameters to be optimized: ['nu']
bounds: [[0.1 1. ]]
sampled x0: [0.8858425]
optimizer results:
      fun: 0.4797763813693626
 hess_inv: <1x1 LbfgsInvHessProduct with dtype=float64>
      jac: array([-3.06976666e-06])
  message: b'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'
     nfev: 16
      nit: 5
     njev: 8
   status: 0
  success: True
        x: array([0.39963594])
Parameters
  • muygps (MuyGPS) – The model to be optimized.

  • batch_targets (ndarray) – Matrix of floats of shape (batch_count, response_count) whose rows give the expected response for each batch element.

  • batch_nn_targets (ndarray) – Tensor of floats of shape (batch_count, nn_count, response_count) containing the expected response for each nearest neighbor of each batch element.

  • crosswise_dists (ndarray) – Distance matrix of floats of shape (batch_count, nn_count) whose rows give the distances between each batch element and its nearest neighbors.

  • pairwise_dists (ndarray) – Distance tensor of floats of shape (batch_count, nn_count, nn_count) whose second two dimensions give the pairwise distances between the nearest neighbors of each batch element.

  • loss_method (str) – Indicates the loss function to be used.

  • obj_method (str) – Indicates the objective function to be minimized. Currently restricted to "loo_crossval".

  • opt_method (str) – Indicates the optimization method to be used. Currently restricted to "bayesian" (alternately "bayes" or "bayes_opt") and "scipy".

  • sigma_method (Optional[str]) – The optimization method to be employed to learn the sigma_sq hyperparameter.

  • verbose (bool) – If True, print debug messages.

  • kwargs – Additional keyword arguments to be passed to the wrapper optimizer.

Return type

MuyGPS

Returns

A new MuyGPs model whose specified hyperparameters have been optimized.