'Fit the model with X and apply the dimensionality reduction on X.
Parameters
X : array-like, shape (n_samples, n_features)
New data, where n_samples in the number of samples
and n_features is the number of features.
Returns
X_new : array-like, shape (n_samples, n_components)'

def fit_transform(self, X, y=None):

    X = check_array(X)
    X = self._fit(X)
    return np.dot(X, self.components_.T)
