Esempio n. 1
0
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