#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sun Dec 23 16:56:44 2018 @author: ljia """ import functools from libs import * import multiprocessing from gklearn.kernels.rwalk_sym import randomwalkkernel from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct import numpy as np dslist = [ {'name': 'Letter-med', 'dataset': '../datasets/Letter-med/Letter-med_A.txt'}, # node nsymb {'name': 'ENZYMES', 'dataset': '../datasets/ENZYMES_txt/ENZYMES_A_sparse.txt'}, # node symb/nsymb ] estimator = randomwalkkernel param_grid = [{'C': np.logspace(-10, 10, num=41, base=10)}, {'alpha': np.logspace(-10, 10, num=41, base=10)}] for ds in dslist: print() print(ds['name']) for compute_method in ['conjugate', 'fp']: if compute_method == 'sylvester': param_grid_precomputed = {'compute_method': ['sylvester'], # 'weight': np.linspace(0.01, 0.10, 10)} 'weight': np.logspace(-1, -10, num=10, base=10)} elif compute_method == 'conjugate': mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) param_grid_precomputed = {'compute_method': ['conjugate'], 'node_kernels': [{'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}], 'edge_kernels': [{'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}], 'weight': np.logspace(-1, -10, num=10, base=10)} elif compute_method == 'fp': mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) param_grid_precomputed = {'compute_method': ['fp'], 'node_kernels': [{'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}], 'edge_kernels': [{'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}], 'weight': np.logspace(-3, -10, num=8, base=10)} elif compute_method == 'spectral': param_grid_precomputed = {'compute_method': ['spectral'], 'weight': np.logspace(-1, -10, num=10, base=10), 'sub_kernel': ['geo', 'exp']} model_selection_for_precomputed_kernel( ds['dataset'], estimator, param_grid_precomputed, (param_grid[1] if ('task' in ds and ds['task'] == 'regression') else param_grid[0]), (ds['task'] if 'task' in ds else 'classification'), NUM_TRIALS=30, datafile_y=(ds['dataset_y'] if 'dataset_y' in ds else None), extra_params=(ds['extra_params'] if 'extra_params' in ds else None), ds_name=ds['name'], n_jobs=multiprocessing.cpu_count(), read_gm_from_file=False) print()