Пример #1
0
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
Пример #2
0
    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
Пример #3
0
    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