Constructs the DistanceClassifier from the provided training data

        Parameters
        ----------
        features: array-like {n_samples, n_features}
            Feature matrix
        classes: array-like {n_samples}
            List of class labels for prediction

        Returns
        -------
        None

def fit(self, features, classes):
        """Constructs the DistanceClassifier from the provided training data

        Parameters
        ----------
        features: array-like {n_samples, n_features}
            Feature matrix
        classes: array-like {n_samples}
            List of class labels for prediction

        Returns
        -------
        None

        """
        # class labels
        classes = self.le.fit_transform(classes)

        # group the data by class label
        X = []
        self.mu = []
        self.Z = []
        for i in np.unique(classes):
            X.append(features[classes == i])
            self.mu.append(np.mean(X[i],axis=0))
            if self.d == 'mahalanobis':
                self.Z.append(np.cov(X[i].transpose()))

        return self