'Return log-probability estimates for the test vector X.
Parameters
X : array-like, shape = [n_samples, n_features]
Returns
C : array-like, shape = [n_samples, n_classes]
Returns the log-probability of the samples for each class in
the model. The columns correspond to the classes in sorted
order, as they appear in the attribute `classes_`.'

def predict_log_proba(self, X):

    jll = self._joint_log_likelihood(X)
    log_prob_x = logsumexp(jll, axis=1)
    return (jll - np.atleast_2d(log_prob_x).T)
