def get_3d_grid_gmm(subdivisions: Tuple[int, int, int] = (5, 5, 5), variance: float = 0.04) -> GaussianMixture: """ Compute the weight, mean and covariance of a gmm placed on a 3D grid :param subdivisions: 2 element list of number of subdivisions of the 3D space in each axes to form the grid :param variance: scalar for spherical gmm.p :return gmm: gmm: instance of sklearn GaussianMixture (GMM) object Gauassian mixture model """ n_gaussians = np.prod(np.array(subdivisions)) step = [ 1.0 / (subdivisions[0]), 1.0 / (subdivisions[1]), 1.0 / (subdivisions[2]) ] means = np.mgrid[step[0] - 1:1.0 - step[0]:complex(0, subdivisions[0]), step[1] - 1:1.0 - step[1]:complex(0, subdivisions[1]), step[2] - 1:1.0 - step[2]:complex(0, subdivisions[2])] means = np.reshape(means, [3, -1]).T covariances = variance * np.ones_like(means) weights = (1.0 / n_gaussians) * np.ones(n_gaussians) gmm = GaussianMixture(n_components=n_gaussians, covariance_type='diag') gmm.weights_ = weights gmm.covariances_ = covariances gmm.means_ = means gmm.precisions_cholesky_ = _compute_precision_cholesky(covariances, 'diag') return gmm
def load_mixture_model(data, use_mgrd=True): if use_mgrd: mm = ExtendedMGRDMixtureModel.load_from_json({'covars': data['gmm_covars'], 'means': data['gmm_means'], 'weights': data['gmm_weights']}) else: n_components =len(np.array(data['gmm_weights'])) mm = GaussianMixture(n_components=n_components, covariance_type='full')#weights_init=np.array(data['gmm_weights']), #reg_covar=np.array(data['gmm_covars']), #means_init=np.array(data['gmm_means']), covariance_type='full') mm.weights_ = np.array(data['gmm_weights']) mm.means_ = np.array(data['gmm_means']) mm.converged_ = True mm.covariances_ = np.array(data['gmm_covars']) mm.precisions_cholesky_ = _compute_precision_cholesky(mm.covariances_, covariance_type='full') mm.n_dims =len(mm.means_[0]) # if 'gmm_precisions_cholesky' not in data.keys(): write_message_to_log("Initialize scipy GMM", LOG_MODE_DEBUG) return mm
def _init_gmm_from_json(self, data): """ Initialize the Gaussian Mixture model. Parameters ---------- * data: dictionary \tThe dictionary must contain all parameters for the Gaussian Mixture Model. """ n_components = len(np.array(data['gmm_weights'])) gmm = GaussianMixture(n_components=n_components, covariance_type='full') gmm.weights_ = np.array(data['gmm_weights']) gmm.means_ = np.array(data['gmm_means']) gmm.converged_ = True gmm.covariances_ = np.array(data['gmm_covars']) gmm.precisions_cholesky_ = _compute_precision_cholesky( gmm.covariances_, covariance_type='full') gmm.n_dims = len(gmm.means_[0]) self.gaussian_mixture_model = gmm