def logprob_a(self, X, Xcov):
        """
        Evaluate the probability for a set of points

        Parameters
        ----------
        X: array_like
            Input data. shape = (n_samples, n_features)
        Xcov: array_like
            Covariance of input data.  shape = (n_samples, n_features,
            n_features)

        Returns
        -------
        p: ndarray
            Probabilities.  shape = (n_samples,)
        """
        X = np.asarray(X)
        Xcov = np.asarray(Xcov)
        n_samples, n_features = X.shape

        # assume full covariances of data
        assert Xcov.shape == (n_samples, n_features, n_features)

        X = X[:, np.newaxis, :]
        Xcov = Xcov[:, np.newaxis, :, :]
        T = Xcov + self.V
        
        if self.Nthreads == 1:
            return log_multivariate_gaussian(X, self.mu, T)
        else:
            return log_multivariate_gaussian_Nthreads(X, self.mu, T,
                                                      self.Nthreads)
Exemple #2
0
    def logprob_a(self, X, Xcov):
        """
        Evaluate the probability for a set of points

        Parameters
        ----------
        X: array_like
            Input data. shape = (n_samples, n_features)
        Xcov: array_like
            Covariance of input data.  shape = (n_samples, n_features,
            n_features)

        Returns
        -------
        p: ndarray
            Probabilities.  shape = (n_samples,)
        """
        X = np.asarray(X)
        Xcov = np.asarray(Xcov)
        n_samples, n_features = X.shape

        # assume full covariances of data
        assert Xcov.shape == (n_samples, n_features, n_features)

        X = X[:, np.newaxis, :]
        Xcov = Xcov[:, np.newaxis, :, :]
        T = Xcov + self.V

        if self.Nthreads == 1:
            return log_multivariate_gaussian(X, self.mu, T)
        else:
            return log_multivariate_gaussian_Nthreads(X, self.mu, T,
                                                      self.Nthreads)
def _Estep((T, w_m, X, model, n_samples)):
    """
    Compute the Estep for the given data chunk and current model
    """
    # compute inverse of each covariance matrix T
    Tshape = T.shape
    T = T.reshape([n_samples * model.n_components,
                   model.n_features, model.n_features])
    Tinv = np.array([np.linalg.inv(T[i])
                     for i in range(T.shape[0])]).reshape(Tshape)
    T = T.reshape(Tshape)

    # evaluate each mixture at each point
    N = np.exp(log_multivariate_gaussian(X, model.mu, T, Vinv=Tinv))

    # q
    q = (N * model.alpha) / np.dot(N, model.alpha)[:, None]

    # b
    tmp = np.sum(Tinv * w_m[:, :, np.newaxis, :], -1)
    b = model.mu + np.sum(model.V * tmp[:, :, np.newaxis, :], -1)

    # B
    tt = time()
    tmp = np.sum(Tinv[:, :, :, :, np.newaxis]
                 * model.V[:, np.newaxis, :, :], -2)
    B = model.V - np.sum(model.V[:, :, :, np.newaxis]
                         * tmp[:, :, np.newaxis, :, :], -2)

    return (q, b, B)
Exemple #4
0
def _Estep((T, w_m, X, model, n_samples)):
    """
    Compute the Estep for the given data chunk and current model
    """
    # compute inverse of each covariance matrix T
    Tshape = T.shape
    T = T.reshape(
        [n_samples * model.n_components, model.n_features, model.n_features])
    Tinv = np.array([np.linalg.inv(T[i])
                     for i in range(T.shape[0])]).reshape(Tshape)
    T = T.reshape(Tshape)

    # evaluate each mixture at each point
    N = np.exp(log_multivariate_gaussian(X, model.mu, T, Vinv=Tinv))

    # q
    q = (N * model.alpha) / np.dot(N, model.alpha)[:, None]

    # b
    tmp = np.sum(Tinv * w_m[:, :, np.newaxis, :], -1)
    b = model.mu + np.sum(model.V * tmp[:, :, np.newaxis, :], -1)

    # B
    tt = time()
    tmp = np.sum(Tinv[:, :, :, :, np.newaxis] * model.V[:, np.newaxis, :, :],
                 -2)
    B = model.V - np.sum(
        model.V[:, :, :, np.newaxis] * tmp[:, :, np.newaxis, :, :], -2)

    return (q, b, B)