'Fit Naive Bayes classifier according to X, y
Parameters
X : {array-like, sparse matrix}, shape = [n_samples, n_features]
Training vectors, where n_samples is the number of samples and
n_features is the number of features.
y : array-like, shape = [n_samples]
Target values.
sample_weight : array-like, shape = [n_samples], (default=None)
Weights applied to individual samples (1. for unweighted).
Returns
self : object
Returns self.'

def fit(self, X, y, sample_weight=None):

    (X, y) = check_X_y(X, y, 'csr')
    (_, n_features) = X.shape
    labelbin = LabelBinarizer()
    Y = labelbin.fit_transform(y)
    self.classes_ = labelbin.classes_
    if (Y.shape[1] == 1):
        Y = np.concatenate(((1 - Y), Y), axis=1)
    Y = Y.astype(np.float64)
    if (sample_weight is not None):
        sample_weight = np.atleast_2d(sample_weight)
        Y *= check_array(sample_weight).T
    class_prior = self.class_prior
    n_effective_classes = Y.shape[1]
    self.class_count_ = np.zeros(n_effective_classes, dtype=np.float64)
    self.feature_count_ = np.zeros((n_effective_classes, n_features), dtype=np.float64)
    self._count(X, Y)
    alpha = self._check_alpha()
    self._update_feature_log_prob(alpha)
    self._update_class_log_prior(class_prior=class_prior)
    return self
