def init_from_covariance_matrix(cls, C, mean, n_samples, centred=True, max_n_components=None): r""" Build the Principal Component Analysis (PCA) by eigenvalue decomposition of the provided covariance/scatter matrix. For details of the implementation of PCA, see :map:`pcacov`. Parameters ---------- C : ``(n_features, n_features)`` `ndarray` The Covariance/Scatter matrix, where `N` is the number of features. mean : :map:`Vectorizable` The mean instance. It must be a :map:`Vectorizable` and *not* an `ndarray`. n_samples : `int` The number of samples used to generate the covariance matrix. centred : `bool`, optional When ``True`` we assume that the data were centered before computing the covariance matrix. max_n_components : `int`, optional The maximum number of components to keep in the model. Any components above and beyond this one are discarded. """ # Create new pca instance self_model = PCAVectorModel.__new__(cls) self_model.n_samples = n_samples # Compute pca on covariance e_vectors, e_values = pcacov(C) # The call to __init__ of MeanLinearModel is done in here self_model._constructor_helper(eigenvalues=e_values, eigenvectors=e_vectors, mean=mean.as_vector(), centred=centred, max_n_components=max_n_components) VectorizableBackedModel.__init__(self_model, mean) return self_model
def init_from_components(cls, components, eigenvalues, mean, n_samples, centred, max_n_components=None): r""" Build the Principal Component Analysis (PCA) using the provided components (eigenvectors) and eigenvalues. Parameters ---------- components : ``(n_components, n_features)`` `ndarray` The eigenvectors to be used. eigenvalues : ``(n_components, )`` `ndarray` The corresponding eigenvalues. mean : :map:`Vectorizable` The mean instance. It must be a :map:`Vectorizable` and *not* an `ndarray`. n_samples : `int` The number of samples used to generate the eigenvectors. centred : `bool`, optional When ``True`` we assume that the data were centered before computing the eigenvectors. max_n_components : `int`, optional The maximum number of components to keep in the model. Any components above and beyond this one are discarded. """ # Create new pca instance self_model = PCAVectorModel.__new__(cls) self_model.n_samples = n_samples # The call to __init__ of MeanLinearModel is done in here self_model._constructor_helper(eigenvalues=eigenvalues, eigenvectors=components, mean=mean.as_vector(), centred=centred, max_n_components=max_n_components) VectorizableBackedModel.__init__(self_model, mean) return self_model