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