def set_kpca_obj(pars, data, sntype, type_number): """ Set kpca object based on cross-validation results. input: pars, dict output from read_hyperpar data, array output from read_matrix sntype, list output from read_matrix type_number, dict dictionary to translate types between raw data and final classification keywords -> final classificaton elements values -> identifiers in raw data output: obj_kpca, KernelPCA obj tailored with cross-validation results spec_matrix, array low dimension spectroscopic matrix labels, list classes as defined in raw data files """ from sklearn.decomposition import KernelPCA import numpy as np # start kpca object obj_kpca = KernelPCA() obj_kpca.eigen_solver = pars['eigen_solver'] obj_kpca.kernel = pars['kernel'] obj_kpca.alpha = pars['alpha'] obj_kpca.gamma = pars['gamma'] obj_kpca.n_components = pars['n_components'] obj_kpca.coef0 = pars['coef0'] obj_kpca.degree = pars['degree'] obj_kpca.tol = pars['tol'] obj_kpca.fit_inverse_transform = pars['fit_inverse_transform'] obj_kpca.remove_zero_eig = pars['remove_zero_eig'] obj_kpca.kernel_params = pars['kernel_params'] obj_kpca.max_iter = pars['max_iter'] spec_matrix = obj_kpca.fit_transform(data) # construct label vector labels = [] for elem in sntype: for classes in type_number.keys(): if elem in type_number[classes]: labels.append(classes) labels = np.array(labels) return obj_kpca, spec_matrix, labels
def compute_scores(X): pca = PCA(svd_solver='auto') kpca = KernelPCA(fit_inverse_transform=True) ica = FastICA() nmf = NMF(init='nndsvda') pca_scores, ica_scores, nmf_scores, kpca_scores = [], [], [], [] for n in n_components: pca.n_components = n ica.n_components = n nmf.n_components = n kpca.n_components = n print(n) Xpca = pca.inverse_transform(pca.fit_transform(Xs)) pca_scores.append(explained_variance_score(Xs, Xpca)) Xica = ica.inverse_transform(ica.fit_transform(Xs)) ica_scores.append(explained_variance_score(Xs, Xica)) Xkpca = kpca.inverse_transform(kpca.fit_transform(Xs)) kpca_scores.append(explained_variance_score(Xs, Xkpca)) Xnmf = nmf.inverse_transform(nmf.fit_transform(X)) nmf_scores.append(explained_variance_score(X, Xnmf)) return pca_scores, ica_scores, nmf_scores, kpca_scores