diff --git a/README.md b/README.md index 56bdafc..88eb744 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,15 @@ A python package for graph kernels. ## Requirements -* numpy - 1.13.3 -* scipy - 1.0.0 -* matplotlib - 2.1.0 -* networkx - 2.0 -* sklearn - 0.19.1 -* tabulate - 0.8.2 +numpy==1.14.5 +scipy==1.1.0 +matplotlib==2.2.2 +networkx==2.1 +scikit-learn==0.19.1 +tabulate==0.8.2 +tqdm==4.23.4 +control==0.7.0 (for generalized random walk kernels only) +slycot===0.3.2.dev-5263ada (for generalized random walk kernels only, requires fortran compiler, gfortran for example) ## Results with minimal test RMSE for each kernel on dataset Asyclic @@ -28,7 +31,7 @@ For prediction we randomly divide the data in train and test subset, where 90\% | WL shortest path | 28.74±0.60 | 38.20±0.62 | 39.02±6.09 | 'height': 10.0, 'alpha': '1.00' | 146.83"/80.63"±45.04" | | WL edge | 30.21±0.64 | 36.53±1.02 | 38.42±6.42 | 'height': 5.0, 'alpha': '6.31e-01' | 5.24"/5.15"±2.83" | | Treelet | 7.33±0.64 | 13.86±0.80 | 15.38±3.56 | 'alpha': '1.12e+01' | 0.48" | -| Path up to d | 5.76±0.27 | 9.89±0.87 | 10.21±4.16 | 'depth': 2.0, 'k_func': 'MinMax', 'alpha': '0.1' | 0.56"/1.16"±0.75" | +| Path up to d | 5.76±0.27 | 9.89±0.87 | 10.21±4.16 | 'depth': 2.0, 'k_func': 'MinMax', 'alpha ': '0.1' | 0.56"/1.16"±0.75" | | Cyclic pattern | | | | | | | Walk up to n | 20.88±0.74 | 23.34±1.11 | 24.46±6.57 | 'n': 2.0, 'alpha': '1.00e-03' | 0.56"/331.70"±753.44" | diff --git a/datasets/ds.py b/datasets/ds.py index bdd515c..c3781b4 100644 --- a/datasets/ds.py +++ b/datasets/ds.py @@ -3,106 +3,66 @@ dslist = [ 'name': 'Acyclic', 'dataset': '../datasets/acyclic/dataset_bps.ds', 'task': 'regression' - }, # node_labeled - { - 'name': 'COIL-DEL', - 'dataset': '../datasets/COIL-DEL/COIL-DEL_A.txt' - }, # edge_labeled + }, # node symb + # {'name': 'COIL-DEL', 'dataset': '../datasets/COIL-DEL/COIL-DEL_A.txt'}, # edge symb, node nsymb { 'name': 'PAH', 'dataset': '../datasets/PAH/dataset.ds', }, # unlabeled { - 'name': 'Mutagenicity', - 'dataset': '../datasets/Mutagenicity/Mutagenicity_A.txt' - }, # fully_labeled - { 'name': 'MAO', 'dataset': '../datasets/MAO/dataset.ds', - }, + }, # node/edge symb { 'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG.mat', 'extra_params': { 'am_sp_al_nl_el': [0, 0, 3, 1, 2] } - }, + }, # node/edge symb { 'name': 'Alkane', 'dataset': '../datasets/Alkane/dataset.ds', 'task': 'regression', 'dataset_y': '../datasets/Alkane/dataset_boiling_point_names.txt', - }, - { - 'name': 'BZR', - 'dataset': '../datasets/BZR_txt/BZR_A_sparse.txt' - }, + }, # contains single node graph, node symb + # {'name': 'BZR', 'dataset': '../datasets/BZR_txt/BZR_A_sparse.txt'}, # node symb/nsymb + # {'name': 'COX2', 'dataset': '../datasets/COX2_txt/COX2_A_sparse.txt'}, # node symb/nsymb { - 'name': 'COX2', - 'dataset': '../datasets/COX2_txt/COX2_A_sparse.txt' - }, + 'name': 'Mutagenicity', + 'dataset': '../datasets/Mutagenicity/Mutagenicity_A.txt' + }, # node/edge symb { 'name': 'ENZYMES', 'dataset': '../datasets/ENZYMES_txt/ENZYMES_A_sparse.txt' - }, - { - 'name': 'DHFR', - 'dataset': '../datasets/DHFR_txt/DHFR_A_sparse.txt' - }, - { - 'name': 'SYNTHETIC', - 'dataset': '../datasets/SYNTHETIC_txt/SYNTHETIC_A_sparse.txt' - }, - { - 'name': 'MSRC9', - 'dataset': '../datasets/MSRC_9_txt/MSRC_9_A.txt' - }, - { - 'name': 'MSRC21', - 'dataset': '../datasets/MSRC_21_txt/MSRC_21_A.txt' - }, + }, # node symb/nsymb + # {'name': 'Fingerprint', 'dataset': '../datasets/Fingerprint/Fingerprint_A.txt'}, { - 'name': 'FIRSTMM_DB', - 'dataset': '../datasets/FIRSTMM_DB/FIRSTMM_DB_A.txt' - }, - { - 'name': 'PROTEINS', - 'dataset': '../datasets/PROTEINS_txt/PROTEINS_A_sparse.txt' - }, - { - 'name': 'PROTEINS_full', - 'dataset': '../datasets/PROTEINS_full_txt/PROTEINS_full_A_sparse.txt' + 'name': 'Letter-med', + 'dataset': '../datasets/Letter-med/Letter-med_A.txt' }, + # {'name': 'DHFR', 'dataset': '../datasets/DHFR_txt/DHFR_A_sparse.txt'}, # node symb/nsymb + # {'name': 'SYNTHETIC', 'dataset': '../datasets/SYNTHETIC_txt/SYNTHETIC_A_sparse.txt'}, # node symb/nsymb + # {'name': 'MSRC9', 'dataset': '../datasets/MSRC_9_txt/MSRC_9_A.txt'}, # node symb + # {'name': 'MSRC21', 'dataset': '../datasets/MSRC_21_txt/MSRC_21_A.txt'}, # node symb + # {'name': 'FIRSTMM_DB', 'dataset': '../datasets/FIRSTMM_DB/FIRSTMM_DB_A.txt'}, # node symb/nsymb ,edge nsymb + + # {'name': 'PROTEINS', 'dataset': '../datasets/PROTEINS_txt/PROTEINS_A_sparse.txt'}, # node symb/nsymb + # {'name': 'PROTEINS_full', 'dataset': '../datasets/PROTEINS_full_txt/PROTEINS_full_A_sparse.txt'}, # node symb/nsymb { 'name': 'D&D', 'dataset': '../datasets/D&D/DD.mat', 'extra_params': { 'am_sp_al_nl_el': [0, 1, 2, 1, -1] } - }, - { - 'name': 'AIDS', - 'dataset': '../datasets/AIDS/AIDS_A.txt' - }, - { - 'name': 'NCI1', - 'dataset': '../datasets/NCI1/NCI1.mat', - 'extra_params': { - 'am_sp_al_nl_el': [1, 1, 2, 0, -1] - } - }, - { - 'name': 'NCI109', - 'dataset': '../datasets/NCI109/NCI109.mat', - 'extra_params': { - 'am_sp_al_nl_el': [1, 1, 2, 0, -1] - } - }, - { - 'name': 'NCI-HIV', - 'dataset': '../datasets/NCI-HIV/AIDO99SD.sdf', - 'dataset_y': '../datasets/NCI-HIV/aids_conc_may04.txt', - }, + }, # node symb + # {'name': 'AIDS', 'dataset': '../datasets/AIDS/AIDS_A.txt'}, # node symb/nsymb, edge symb + # {'name': 'NCI1', 'dataset': '../datasets/NCI1/NCI1.mat', + # 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, # node symb + # {'name': 'NCI109', 'dataset': '../datasets/NCI109/NCI109.mat', + # 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, # node symb + # {'name': 'NCI-HIV', 'dataset': '../datasets/NCI-HIV/AIDO99SD.sdf', + # 'dataset_y': '../datasets/NCI-HIV/aids_conc_may04.txt',}, # node/edge symb # # not working below # {'name': 'PTC_FM', 'dataset': '../datasets/PTC/Train/FM.ds',}, @@ -110,3 +70,116 @@ dslist = [ # {'name': 'PTC_MM', 'dataset': '../datasets/PTC/Train/MM.ds',}, # {'name': 'PTC_MR', 'dataset': '../datasets/PTC/Train/MR.ds',}, ] + +# dslist = [ +# { +# 'name': 'Acyclic', +# 'dataset': '../datasets/acyclic/dataset_bps.ds', +# 'task': 'regression' +# }, # node_labeled +# { +# 'name': 'COIL-DEL', +# 'dataset': '../datasets/COIL-DEL/COIL-DEL_A.txt' +# }, # edge_labeled +# { +# 'name': 'PAH', +# 'dataset': '../datasets/PAH/dataset.ds', +# }, # unlabeled +# { +# 'name': 'Mutagenicity', +# 'dataset': '../datasets/Mutagenicity/Mutagenicity_A.txt' +# }, # fully_labeled +# { +# 'name': 'MAO', +# 'dataset': '../datasets/MAO/dataset.ds', +# }, +# { +# 'name': 'MUTAG', +# 'dataset': '../datasets/MUTAG/MUTAG.mat', +# 'extra_params': { +# 'am_sp_al_nl_el': [0, 0, 3, 1, 2] +# } +# }, +# { +# 'name': 'Alkane', +# 'dataset': '../datasets/Alkane/dataset.ds', +# 'task': 'regression', +# 'dataset_y': '../datasets/Alkane/dataset_boiling_point_names.txt', +# }, +# { +# 'name': 'BZR', +# 'dataset': '../datasets/BZR_txt/BZR_A_sparse.txt' +# }, +# { +# 'name': 'COX2', +# 'dataset': '../datasets/COX2_txt/COX2_A_sparse.txt' +# }, +# { +# 'name': 'ENZYMES', +# 'dataset': '../datasets/ENZYMES_txt/ENZYMES_A_sparse.txt' +# }, +# { +# 'name': 'DHFR', +# 'dataset': '../datasets/DHFR_txt/DHFR_A_sparse.txt' +# }, +# { +# 'name': 'SYNTHETIC', +# 'dataset': '../datasets/SYNTHETIC_txt/SYNTHETIC_A_sparse.txt' +# }, +# { +# 'name': 'MSRC9', +# 'dataset': '../datasets/MSRC_9_txt/MSRC_9_A.txt' +# }, +# { +# 'name': 'MSRC21', +# 'dataset': '../datasets/MSRC_21_txt/MSRC_21_A.txt' +# }, +# { +# 'name': 'FIRSTMM_DB', +# 'dataset': '../datasets/FIRSTMM_DB/FIRSTMM_DB_A.txt' +# }, +# { +# 'name': 'PROTEINS', +# 'dataset': '../datasets/PROTEINS_txt/PROTEINS_A_sparse.txt' +# }, +# { +# 'name': 'PROTEINS_full', +# 'dataset': '../datasets/PROTEINS_full_txt/PROTEINS_full_A_sparse.txt' +# }, +# { +# 'name': 'D&D', +# 'dataset': '../datasets/D&D/DD.mat', +# 'extra_params': { +# 'am_sp_al_nl_el': [0, 1, 2, 1, -1] +# } +# }, +# { +# 'name': 'AIDS', +# 'dataset': '../datasets/AIDS/AIDS_A.txt' +# }, +# { +# 'name': 'NCI1', +# 'dataset': '../datasets/NCI1/NCI1.mat', +# 'extra_params': { +# 'am_sp_al_nl_el': [1, 1, 2, 0, -1] +# } +# }, +# { +# 'name': 'NCI109', +# 'dataset': '../datasets/NCI109/NCI109.mat', +# 'extra_params': { +# 'am_sp_al_nl_el': [1, 1, 2, 0, -1] +# } +# }, +# { +# 'name': 'NCI-HIV', +# 'dataset': '../datasets/NCI-HIV/AIDO99SD.sdf', +# 'dataset_y': '../datasets/NCI-HIV/aids_conc_may04.txt', +# }, + +# # # not working below +# # {'name': 'PTC_FM', 'dataset': '../datasets/PTC/Train/FM.ds',}, +# # {'name': 'PTC_FR', 'dataset': '../datasets/PTC/Train/FR.ds',}, +# # {'name': 'PTC_MM', 'dataset': '../datasets/PTC/Train/MM.ds',}, +# # {'name': 'PTC_MR', 'dataset': '../datasets/PTC/Train/MR.ds',}, +# ] diff --git a/notebooks/run_randomwalkkernel.ipynb b/notebooks/run_randomwalkkernel.ipynb index 7999825..dd15b3e 100644 --- a/notebooks/run_randomwalkkernel.ipynb +++ b/notebooks/run_randomwalkkernel.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "scrolled": true }, @@ -23,8 +23,8 @@ "\n", " None edge weight specified. Set all weight to 1.\n", "\n", - "compute adjacency matrices: 100%|██████████| 183/183 [00:00<00:00, 5175.74it/s]\n", - "calculating kernels: 9%|▉ | 1521/16836.0 [00:00<00:01, 15206.93it/s]" + "compute adjacency matrices: 100%|██████████| 183/183 [00:00<00:00, 4963.99it/s]\n", + "calculating kernels: 6%|▌ | 1048/16836.0 [00:00<00:01, 10475.79it/s]" ] }, { @@ -39,26 +39,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "calculating kernels: 98%|█████████▊| 16533/16836.0 [00:00<00:00, 17097.06it/s]\n", - " --- kernel matrix of random walk kernel of size 183 built in 0.9856514930725098 seconds ---\n", + "calculating kernels: 95%|█████████▍| 15982/16836.0 [00:00<00:00, 17223.87it/s]\n", + " --- kernel matrix of random walk kernel of size 183 built in 1.029677391052246 seconds ---\n", "\n", - "the gram matrix with parameters {'compute_method': 'sylvester', 'weight': 1.0} is: \n", + "the gram matrix with parameters {'weight': 1.0, 'compute_method': 'sylvester'} is: \n", "ignored, as it contains elements that are not numbers.\n", "\n", " None edge weight specified. Set all weight to 1.\n", "\n", "\n", "compute adjacency matrices: 0%| | 0/183 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0mdatafile_y\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'dataset_y'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'dataset_y'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mds\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[0mextra_params\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'extra_params'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'extra_params'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mds\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 62\u001b[0;31m ds_name=ds['name'])\n\u001b[0m\u001b[1;32m 63\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/media/ljia/DATA/research-repo/codes/Linlin/py-graph/pygraph/utils/model_selection_precomputed.py\u001b[0m in \u001b[0;36mmodel_selection_for_precomputed_kernel\u001b[0;34m(datafile, estimator, param_grid_precomputed, param_grid, model_type, NUM_TRIALS, datafile_y, extra_params, ds_name)\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0mnb_gm_ignore\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m \u001b[0;31m# the number of gram matrices those should not be considered, as they may contain elements that are not numbers (NaN)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams_out\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparam_list_precomputed\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 115\u001b[0;31m \u001b[0mrtn_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mestimator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mparams_out\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 116\u001b[0m \u001b[0mKmatrix\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrtn_data\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0mcurrent_run_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrtn_data\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/media/ljia/DATA/research-repo/codes/Linlin/py-graph/pygraph/kernels/randomWalkKernel.py\u001b[0m in \u001b[0;36mrandomwalkkernel\u001b[0;34m(node_label, edge_label, edge_weight, h, p, q, weight, compute_method, *args)\u001b[0m\n\u001b[1;32m 100\u001b[0m )\n\u001b[1;32m 101\u001b[0m Kmatrix = _randomwalkkernel_sylvester(Gn, weight, p, q, node_label,\n\u001b[0;32m--> 102\u001b[0;31m edge_label, eweight)\n\u001b[0m\u001b[1;32m 103\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 104\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mcompute_method\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'conjugate'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/media/ljia/DATA/research-repo/codes/Linlin/py-graph/pygraph/kernels/randomWalkKernel.py\u001b[0m in \u001b[0;36m_randomwalkkernel_sylvester\u001b[0;34m(Gn, lmda, p, q, node_label, edge_label, eweight)\u001b[0m\n\u001b[1;32m 196\u001b[0m \u001b[0mC\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpd_uni\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 197\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 198\u001b[0;31m \u001b[0mX\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdlyap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mQ\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 199\u001b[0m \u001b[0mX\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'F'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 200\u001b[0m \u001b[0;31m# use uniform distribution if there is no prior knowledge.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/control/mateqn.py\u001b[0m in \u001b[0;36mdlyap\u001b[0;34m(A, Q, C, E)\u001b[0m\n\u001b[1;32m 338\u001b[0m \u001b[0;31m# Solve the Sylvester equation by calling Slycot function sb04qd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 339\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 340\u001b[0;31m \u001b[0mX\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msb04qd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0masarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mQ\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 341\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mve\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 342\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mve\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minfo\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/slycot/synthesis.py\u001b[0m in \u001b[0;36msb04qd\u001b[0;34m(n, m, A, B, C, ldwork)\u001b[0m\n\u001b[1;32m 1234\u001b[0m 'ldwork', 'INFO'+hidden]\n\u001b[1;32m 1235\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mldwork\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1236\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_wrapper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msb04qd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mB\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1237\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1238\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_wrapper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msb04qd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mB\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mldwork\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mldwork\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], diff --git a/notebooks/run_spkernel.ipynb b/notebooks/run_spkernel.ipynb index 86d73bb..63ffaf7 100644 --- a/notebooks/run_spkernel.ipynb +++ b/notebooks/run_spkernel.ipynb @@ -3,6 +3,128 @@ { "cell_type": "code", "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n", + "[Parallel(n_jobs=8)]: Done 2 out of 9 | elapsed: 2.8min remaining: 9.9min\n", + "[Parallel(n_jobs=8)]: Done 3 out of 9 | elapsed: 3.2min remaining: 6.4min\n", + "[Parallel(n_jobs=8)]: Done 4 out of 9 | elapsed: 4.0min remaining: 5.0min\n", + "[Parallel(n_jobs=8)]: Done 5 out of 9 | elapsed: 7.9min remaining: 6.3min\n", + "[Parallel(n_jobs=8)]: Done 6 out of 9 | elapsed: 147.0min remaining: 73.5min\n", + "[Parallel(n_jobs=8)]: Done 7 out of 9 | elapsed: 397.8min remaining: 113.7min\n", + "[Parallel(n_jobs=8)]: Done 9 out of 9 | elapsed: 1098.6min remaining: 0.0s\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 82\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 83\u001b[0;31m \u001b[0mParallel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_jobs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnum_cores\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdelayed\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcompute_ds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mds\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdslist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/joblib/parallel.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, iterable)\u001b[0m\n\u001b[1;32m 960\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 961\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_backend\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieval_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 962\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 963\u001b[0m \u001b[0;31m# Make sure that we get a last message telling us we are done\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 964\u001b[0m \u001b[0melapsed_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_start_time\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/joblib/parallel.py\u001b[0m in \u001b[0;36mretrieve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 863\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 864\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_backend\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'supports_timeout'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 865\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 866\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 867\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/joblib/_parallel_backends.py\u001b[0m in \u001b[0;36mwrap_future_result\u001b[0;34m(future, timeout)\u001b[0m\n\u001b[1;32m 513\u001b[0m AsyncResults.get from multiprocessing.\"\"\"\n\u001b[1;32m 514\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 515\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfuture\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 516\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mLokyTimeoutError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 517\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTimeoutError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/joblib/externals/loky/_base.py\u001b[0m in \u001b[0;36mresult\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 424\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__get_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 425\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 426\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_condition\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 427\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 428\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_state\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mCANCELLED\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mCANCELLED_AND_NOTIFIED\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/lib/python3.5/threading.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# restore state no matter what (e.g., KeyboardInterrupt)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 292\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 293\u001b[0;31m \u001b[0mwaiter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macquire\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 294\u001b[0m \u001b[0mgotit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 295\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "# # test parallel computing\n", + "# import psutil\n", + "# # logical=True counts threads, but we are interested in cores\n", + "# psutil.()# .cpu_count(logical=False)\n", + "%load_ext line_profiler\n", + "%matplotlib inline\n", + "import functools\n", + "from libs import *\n", + "from sklearn.metrics.pairwise import rbf_kernel\n", + "from joblib import Parallel, delayed\n", + "import multiprocessing\n", + "\n", + "from pygraph.kernels.spKernel import spkernel\n", + "from pygraph.utils.kernels import deltakernel, kernelsum\n", + "\n", + "num_cores = multiprocessing.cpu_count()\n", + "\n", + "dslist = [ \n", + " {'name': 'Acyclic', 'dataset': '../datasets/acyclic/dataset_bps.ds', 'task': 'regression'}, # node symb\n", + "# {'name': 'COIL-DEL', 'dataset': '../datasets/COIL-DEL/COIL-DEL_A.txt'}, # edge symb, node nsymb\n", + " {'name': 'PAH', 'dataset': '../datasets/PAH/dataset.ds',}, # unlabeled\n", + " {'name': 'MAO', 'dataset': '../datasets/MAO/dataset.ds',}, # node/edge symb\n", + " {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG.mat',\n", + " 'extra_params': {'am_sp_al_nl_el': [0, 0, 3, 1, 2]}}, # node/edge symb\n", + " {'name': 'Alkane', 'dataset': '../datasets/Alkane/dataset.ds', 'task': 'regression', \n", + " 'dataset_y': '../datasets/Alkane/dataset_boiling_point_names.txt',}, # contains single node graph, node symb\n", + "# {'name': 'BZR', 'dataset': '../datasets/BZR_txt/BZR_A_sparse.txt'}, # node symb/nsymb\n", + "# {'name': 'COX2', 'dataset': '../datasets/COX2_txt/COX2_A_sparse.txt'}, # node symb/nsymb\n", + " {'name': 'Mutagenicity', 'dataset': '../datasets/Mutagenicity/Mutagenicity_A.txt'}, # node/edge symb\n", + " {'name': 'ENZYMES', 'dataset': '../datasets/ENZYMES_txt/ENZYMES_A_sparse.txt'}, # node symb/nsymb\n", + "# {'name': 'Fingerprint', 'dataset': '../datasets/Fingerprint/Fingerprint_A.txt'},\n", + " {'name': 'Letter-med', 'dataset': '../datasets/Letter-med/Letter-med_A.txt'},\n", + "# {'name': 'DHFR', 'dataset': '../datasets/DHFR_txt/DHFR_A_sparse.txt'}, # node symb/nsymb\n", + "# {'name': 'SYNTHETIC', 'dataset': '../datasets/SYNTHETIC_txt/SYNTHETIC_A_sparse.txt'}, # node symb/nsymb\n", + "# {'name': 'MSRC9', 'dataset': '../datasets/MSRC_9_txt/MSRC_9_A.txt'}, # node symb\n", + "# {'name': 'MSRC21', 'dataset': '../datasets/MSRC_21_txt/MSRC_21_A.txt'}, # node symb\n", + "# {'name': 'FIRSTMM_DB', 'dataset': '../datasets/FIRSTMM_DB/FIRSTMM_DB_A.txt'}, # node symb/nsymb ,edge nsymb\n", + "\n", + "# {'name': 'PROTEINS', 'dataset': '../datasets/PROTEINS_txt/PROTEINS_A_sparse.txt'}, # node symb/nsymb\n", + "# {'name': 'PROTEINS_full', 'dataset': '../datasets/PROTEINS_full_txt/PROTEINS_full_A_sparse.txt'}, # node symb/nsymb\n", + " {'name': 'D&D', 'dataset': '../datasets/D&D/DD.mat',\n", + " 'extra_params': {'am_sp_al_nl_el': [0, 1, 2, 1, -1]}}, # node symb\n", + "# {'name': 'AIDS', 'dataset': '../datasets/AIDS/AIDS_A.txt'}, # node symb/nsymb, edge symb\n", + "# {'name': 'NCI1', 'dataset': '../datasets/NCI1/NCI1.mat',\n", + "# 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, # node symb\n", + "# {'name': 'NCI109', 'dataset': '../datasets/NCI109/NCI109.mat',\n", + "# 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, # node symb\n", + "# {'name': 'NCI-HIV', 'dataset': '../datasets/NCI-HIV/AIDO99SD.sdf',\n", + "# 'dataset_y': '../datasets/NCI-HIV/aids_conc_may04.txt',}, # node/edge symb\n", + " \n", + "# # not working below\n", + "# {'name': 'PTC_FM', 'dataset': '../datasets/PTC/Train/FM.ds',},\n", + "# {'name': 'PTC_FR', 'dataset': '../datasets/PTC/Train/FR.ds',},\n", + "# {'name': 'PTC_MM', 'dataset': '../datasets/PTC/Train/MM.ds',},\n", + "# {'name': 'PTC_MR', 'dataset': '../datasets/PTC/Train/MR.ds',},\n", + "]\n", + "estimator = spkernel\n", + "mixkernel = functools.partial(kernelsum, deltakernel, rbf_kernel)\n", + "param_grid_precomputed = {'node_kernels': [{'symb': deltakernel, 'nsymb': rbf_kernel, 'mix': mixkernel}]}\n", + "param_grid = [{'C': np.logspace(-10, 10, num = 41, base = 10)}, \n", + " {'alpha': np.logspace(-10, 10, num = 41, base = 10)}]\n", + " \n", + "def compute_ds(ds):\n", + " print()\n", + " print(ds['name'])\n", + " model_selection_for_precomputed_kernel(\n", + " ds['dataset'], estimator, param_grid_precomputed, \n", + " (param_grid[1] if ('task' in ds and ds['task'] == 'regression') else param_grid[0]), \n", + " (ds['task'] if 'task' in ds else 'classification'), NUM_TRIALS=30,\n", + " datafile_y=(ds['dataset_y'] if 'dataset_y' in ds else None),\n", + " extra_params=(ds['extra_params'] if 'extra_params' in ds else None),\n", + " ds_name=ds['name'])\n", + " \n", + "# %lprun -f spkernel \\\n", + "# model_selection_for_precomputed_kernel( \\\n", + "# ds['dataset'], estimator, param_grid_precomputed, \\\n", + "# (param_grid[1] if ('task' in ds and ds['task'] == 'regression') else param_grid[0]), \\\n", + "# (ds['task'] if 'task' in ds else 'classification'), NUM_TRIALS=30, \\\n", + "# datafile_y=(ds['dataset_y'] if 'dataset_y' in ds else None), \\\n", + "# extra_params=(ds['extra_params'] if 'extra_params' in ds else None))\n", + " print()\n", + " \n", + "Parallel(n_jobs=num_cores, verbose=10)(delayed(compute_ds)(ds) for ds in dslist)" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": { "scrolled": false }, @@ -23,12 +145,10 @@ "\n", " None edge weight specified. Set all weight to 1.\n", "\n", - "getting sp graphs: 100%|██████████| 183/183 [00:00<00:00, 2750.49it/s]\n", - "calculating kernels: 100%|█████████▉| 16808/16836.0 [00:11<00:00, 607.39it/s] \n", - " --- shortest path kernel matrix of size 183 built in 11.701499700546265 seconds ---\n", - "calculating kernels: 100%|██████████| 16836/16836.0 [00:11<00:00, 1447.26it/s]\n", "\n", - "the gram matrix with parameters {'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} is: \n", + " --- shortest path kernel matrix of size 183 built in 3.4878082275390625 seconds ---\n", + "\n", + "the gram matrix with parameters {'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} is: \n", "[[1. 0.47140452 0.33333333 ... 0.30151134 0.30512858 0.27852425]\n", " [0.47140452 1. 0. ... 0.14213381 0.11986583 0.17232809]\n", " [0.33333333 0. 1. ... 0.36851387 0.37293493 0.34815531]\n", @@ -55,8 +175,7 @@ "\n", "1 gram matrices are calculated, 0 of which are ignored.\n", "\n", - "3. Fitting and predicting using nested cross validation. This could really take a while...\n", - "calculate performance: 0%| | 2/1230 [00:00<01:26, 14.18it/s]" + "3. Fitting and predicting using nested cross validation. This could really take a while...\n" ] }, { @@ -64,6 +183,20 @@ "output_type": "stream", "text": [ "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n" ] }, @@ -71,82 +204,564 @@ "name": "stdout", "output_type": "stream", "text": [ - " \n", + "\n", "4. Getting final performance...\n", - "best_params_out: [{'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}}]\n", + "best_params_out: [{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }}]\n", "best_params_in: [{'alpha': 0.01}]\n", "\n", - "best_val_perf: 10.66283832911368\n", - "best_val_std: 0.5408278153570373\n", - "final_performance: [10.315559722243599]\n", - "final_confidence: [2.384096453432681]\n", - "train_performance: [7.431503564719363]\n", - "train_std: [0.22208257392321618]\n", - "\n", - "time to calculate gram matrix with different hyper-params: 11.70±nans\n", - "time to calculate best gram matrix: 11.70±nans\n", - "\n", - "params train_perf valid_perf test_perf gram_matrix_time\n", - "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------ -------------------- ------------------- ------------------\n", - "{'alpha': '1.00e-10', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.82 324939.95±1779702.52 162506.31±890024.17 11.7\n", - "{'alpha': '3.16e-10', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.82 103389.05±566218.31 51709.44±283164.71 11.7\n", - "{'alpha': '1.00e-09', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.82 32773.42±179440.54 16394.79±89738.41 11.7\n", - "{'alpha': '3.16e-09', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.82 10371.32±56739.21 5191.57±28375.88 11.7\n", - "{'alpha': '1.00e-08', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.82 3287.91±17941.77 1649.18±8973.41 11.7\n", - "{'alpha': '3.16e-08', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.82 1047.95±5673.01 528.99±2837.84 11.7\n", - "{'alpha': '1.00e-07', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.82 339.61±1793.28 174.75±897.61 11.7\n", - "{'alpha': '3.16e-07', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.82 115.62±566.41 62.73±284.06 11.7\n", - "{'alpha': '1.00e-06', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.81 44.78±178.46 27.30±90.09 11.7\n", - "{'alpha': '3.16e-06', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.60±0.81 22.37±55.86 16.10±28.87 11.7\n", - "{'alpha': '1.00e-05', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.59±0.78 15.26±17.31 12.54±9.86 11.7\n", - "{'alpha': '3.16e-05', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.57±0.72 12.94±5.71 11.36±4.52 11.7\n", - "{'alpha': '1.00e-04', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.52±0.58 12.03±2.70 10.88±3.23 11.7\n", - "{'alpha': '3.16e-04', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.43±0.41 11.49±1.53 10.55±2.70 11.7\n", - "{'alpha': '1.00e-03', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.33±0.31 11.06±0.82 10.26±2.40 11.7\n", - "{'alpha': '3.16e-03', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.28±0.27 10.76±0.60 10.15±2.28 11.7\n", - "{'alpha': '1.00e-02', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 7.43±0.22 10.66±0.54 10.32±2.38 11.7\n", - "{'alpha': '3.16e-02', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 8.11±0.20 10.86±0.47 10.89±2.61 11.7\n", - "{'alpha': '1.00e-01', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 9.76±0.21 11.90±0.42 12.20±2.84 11.7\n", - "{'alpha': '3.16e-01', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 12.88±0.23 14.53±0.39 14.79±2.97 11.7\n", - "{'alpha': '1.00e+00', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 17.64±0.24 18.83±0.32 19.02±3.17 11.7\n", - "{'alpha': '3.16e+00', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 32.86±17.99 33.24±17.71 33.25±17.11 11.7\n", - "{'alpha': '1.00e+01', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 34.19±0.37 34.39±0.43 34.96±5.17 11.7\n", - "{'alpha': '3.16e+01', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 49.15±0.43 48.90±0.56 49.48±7.14 11.7\n", - "{'alpha': '1.00e+02', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 76.17±0.53 75.76±0.64 76.22±8.54 11.7\n", - "{'alpha': '3.16e+02', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 108.04±0.74 107.66±0.79 108.09±8.81 11.7\n", - "{'alpha': '1.00e+03', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 128.28±0.90 127.91±0.93 128.37±8.78 11.7\n", - "{'alpha': '3.16e+03', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 136.82±0.97 136.44±0.99 136.92±8.75 11.7\n", - "{'alpha': '1.00e+04', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 139.80±0.99 139.43±1.01 139.91±8.74 11.7\n", - "{'alpha': '3.16e+04', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 140.78±1.00 140.40±1.02 140.89±8.73 11.7\n", - "{'alpha': '1.00e+05', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.09±1.00 140.72±1.02 141.20±8.73 11.7\n", - "{'alpha': '3.16e+05', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.19±1.00 140.81±1.02 141.30±8.73 11.7\n", - "{'alpha': '1.00e+06', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.22±1.00 140.85±1.02 141.33±8.73 11.7\n", - "{'alpha': '3.16e+06', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.23±1.00 140.86±1.02 141.34±8.73 11.7\n", - "{'alpha': '1.00e+07', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.23±1.00 140.86±1.02 141.35±8.73 11.7\n", - "{'alpha': '3.16e+07', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.24±1.00 140.86±1.02 141.35±8.73 11.7\n", - "{'alpha': '1.00e+08', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.24±1.00 140.86±1.02 141.35±8.73 11.7\n", - "{'alpha': '3.16e+08', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.24±1.00 140.86±1.02 141.35±8.73 11.7\n", - "{'alpha': '1.00e+09', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.24±1.00 140.86±1.02 141.35±8.73 11.7\n", - "{'alpha': '3.16e+09', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.24±1.00 140.86±1.02 141.35±8.73 11.7\n", - "{'alpha': '1.00e+10', 'node_kernels': {'symb': , 'nsymb': , 'mix': functools.partial(, , )}} 141.24±1.00 140.86±1.02 141.35±8.73 11.7\n" + "best_val_perf: 10.48016704845543\n", + "best_val_std: 0.4581423960367689\n", + "final_performance: [11.856860325044012]\n", + "final_confidence: [1.6523186100392606]\n", + "train_performance: [7.279597258509724]\n", + "train_std: [0.24128809947271068]\n", + "\n", + "time to calculate gram matrix with different hyper-params: 3.49±nans\n", + "time to calculate best gram matrix: 3.49±nans\n", + "total training time with all hyper-param choices: 46.81s\n", + "\n", + "params train_perf valid_perf test_perf gram_matrix_time\n", + "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------ ------------ ----------- ------------------\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-10'} 7.36±0.64 11.98±3.12 11.65±3.32 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-10'} 7.40±0.78 12.14±3.95 11.71±3.52 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-09'} 7.40±0.78 12.14±3.95 11.71±3.52 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-09'} 7.40±0.78 12.14±3.95 11.71±3.52 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-08'} 7.40±0.78 12.14±3.95 11.71±3.52 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-08'} 7.40±0.78 12.14±3.95 11.71±3.52 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-07'} 7.40±0.79 12.14±3.96 11.71±3.52 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-07'} 7.40±0.79 12.14±3.99 11.71±3.53 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-06'} 7.40±0.81 12.16±4.08 11.72±3.55 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-06'} 7.41±0.86 12.21±4.37 11.74±3.63 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-05'} 7.46±1.11 12.45±5.69 11.83±4.01 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-05'} 10.64±18.49 27.50±88.21 17.94±36.68 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-04'} 7.29±0.48 11.60±1.69 11.42±3.09 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-04'} 7.19±0.41 11.18±0.77 11.16±3.00 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-03'} 7.13±0.39 10.90±0.70 11.02±2.97 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-03'} 7.12±0.34 10.65±0.56 11.27±2.50 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-02'} 7.28±0.24 10.48±0.46 11.86±1.65 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-02'} 7.94±0.11 10.67±0.43 12.51±1.10 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-01'} 9.62±0.12 11.78±0.48 13.65±2.20 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-01'} 12.75±0.25 14.41±0.54 16.51±2.92 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+00'} 17.44±0.33 18.67±0.46 21.11±3.92 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+00'} 56.07±67.67 55.81±64.64 65.83±86.28 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+01'} 33.91±0.57 34.15±0.67 36.33±5.23 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+01'} 48.93±0.50 48.71±0.65 50.50±3.37 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+02'} 76.07±0.23 75.65±0.40 76.53±2.14 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+02'} 108.05±0.18 107.63±0.29 107.88±2.37 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+03'} 128.34±0.26 127.93±0.32 127.95±2.62 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+03'} 136.90±0.30 136.48±0.35 136.43±2.72 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+04'} 139.89±0.31 139.47±0.36 139.39±2.75 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+04'} 140.87±0.32 140.45±0.36 140.36±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+05'} 141.18±0.32 140.76±0.36 140.67±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+05'} 141.28±0.32 140.86±0.36 140.77±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+06'} 141.31±0.32 140.89±0.36 140.80±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+06'} 141.32±0.32 140.90±0.36 140.81±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+07'} 141.32±0.32 140.91±0.36 140.82±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+07'} 141.33±0.32 140.91±0.36 140.82±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+08'} 141.33±0.32 140.91±0.36 140.82±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+08'} 141.33±0.32 140.91±0.36 140.82±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+09'} 141.33±0.32 140.91±0.36 140.82±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+09'} 141.33±0.32 140.91±0.36 140.82±2.76 3.49\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+10'} 141.33±0.32 140.91±0.36 140.82±2.76 3.49\n", + "\n", + "\n", + "Alkane\n", + "\n", + "--- This is a regression problem ---\n", + "\n", + "\n", + "I. Loading dataset from file...\n", + "\n", + "2. Calculating gram matrices. This could take a while...\n", + "\n", + " None edge weight specified. Set all weight to 1.\n", + "\n", + "\n", + " 1 graphs are removed as they don't contain edges.\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.5/dist-packages/numpy/core/_methods.py:135: RuntimeWarning: Degrees of freedom <= 0 for slice\n", + " keepdims=keepdims)\n", + "/usr/local/lib/python3.5/dist-packages/numpy/core/_methods.py:127: RuntimeWarning: invalid value encountered in double_scalars\n", + " ret = ret.dtype.type(ret / rcount)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "calculate performance: 100%|██████████| 1230/1230 [00:40<00:00, 30.18it/s]\n", - "\n" + "\n", + " --- shortest path kernel matrix of size 149 built in 3.3240325450897217 seconds ---\n", + "\n", + "the gram matrix with parameters {'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} is: \n", + "[[1. 0.89442719 0.70710678 ... 0.47902167 0.46852129 0.53311399]\n", + " [0.89442719 1. 0.9486833 ... 0.642675 0.62858727 0.68875683]\n", + " [0.70710678 0.9486833 1. ... 0.67743894 0.66258916 0.71205164]\n", + " ...\n", + " [0.47902167 0.642675 0.67743894 ... 1. 0.99747487 0.97420128]\n", + " [0.46852129 0.62858727 0.66258916 ... 0.99747487 1. 0.96209727]\n", + " [0.53311399 0.68875683 0.71205164 ... 0.97420128 0.96209727 1. ]]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "1 gram matrices are calculated, 0 of which are ignored.\n", + "\n", + "3. Fitting and predicting using nested cross validation. This could really take a while...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python3.5/dist-packages/numpy/core/_methods.py:135: RuntimeWarning: Degrees of freedom <= 0 for slice\n", - " keepdims=keepdims)\n", - "/usr/local/lib/python3.5/dist-packages/numpy/core/_methods.py:127: RuntimeWarning: invalid value encountered in double_scalars\n", - " ret = ret.dtype.type(ret / rcount)\n" + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n", + "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", + " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "4. Getting final performance...\n", + "best_params_out: [{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }}]\n", + "best_params_in: [{'alpha': 0.03162277660168379}]\n", + "\n", + "best_val_perf: 8.650257813261417\n", + "best_val_std: 0.42968288406182015\n", + "final_performance: [9.361116361154078]\n", + "final_confidence: [2.218550782316567]\n", + "train_performance: [7.8343217840551755]\n", + "train_std: [0.25589398275456354]\n", + "\n", + "time to calculate gram matrix with different hyper-params: 3.32±nans\n", + "time to calculate best gram matrix: 3.32±nans\n", + "total training time with all hyper-param choices: 30.35s\n", + "\n", + "params train_perf valid_perf test_perf gram_matrix_time\n", + "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------ ------------ ----------- ------------------\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-10'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-10'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-09'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-09'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-08'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-08'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-07'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-07'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-06'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-06'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-05'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-05'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-04'} 7.71±0.25 8.68±0.49 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-04'} 7.71±0.25 8.68±0.48 9.41±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-03'} 7.71±0.25 8.68±0.48 9.40±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-03'} 7.72±0.25 8.68±0.48 9.40±2.17 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-02'} 7.74±0.26 8.67±0.47 9.39±2.19 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-02'} 7.83±0.26 8.65±0.43 9.36±2.22 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e-01'} 8.17±0.26 8.71±0.35 9.33±2.26 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e-01'} 14.40±13.12 14.84±14.51 15.04±13.59 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+00'} 13.74±0.26 14.14±0.28 14.65±1.73 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+00'} 21.84±0.21 22.04±0.27 24.33±2.16 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+01'} 31.21±0.32 31.06±0.37 33.91±2.91 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+01'} 44.70±0.43 44.64±0.45 43.78±3.41 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+02'} 72.78±0.22 72.71±0.21 66.94±6.71 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+02'} 106.35±0.56 106.24±0.55 98.16±8.32 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+03'} 127.45±0.82 127.32±0.81 118.43±8.82 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+03'} 136.29±0.93 136.16±0.93 127.00±8.97 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+04'} 139.38±0.97 139.24±0.96 130.00±9.02 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+04'} 140.39±0.98 140.25±0.98 130.98±9.03 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+05'} 140.72±0.98 140.57±0.98 131.30±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+05'} 140.82±0.99 140.68±0.98 131.40±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+06'} 140.85±0.99 140.71±0.98 131.43±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+06'} 140.86±0.99 140.72±0.98 131.44±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+07'} 140.86±0.99 140.72±0.98 131.44±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+07'} 140.86±0.99 140.72±0.98 131.44±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+08'} 140.87±0.99 140.72±0.98 131.44±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+08'} 140.87±0.99 140.72±0.98 131.44±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+09'} 140.87±0.99 140.72±0.98 131.44±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '3.16e+09'} 140.87±0.99 140.72±0.98 131.44±9.04 3.32\n", + "{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }, 'alpha': '1.00e+10'} 140.87±0.99 140.72±0.98 131.44±9.04 3.32\n", + "\n", + "\n", + "MAO\n", + "\n", + "--- This is a classification problem ---\n", + "\n", + "\n", + "I. Loading dataset from file...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "2. Calculating gram matrices. This could take a while...\n", + "\n", + " None edge weight specified. Set all weight to 1.\n", + "\n", + "\n", + " --- shortest path kernel matrix of size 68 built in 7.607230186462402 seconds ---\n", + "\n", + "the gram matrix with parameters {'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} is: \n", + "[[1. 0.98449615 0.91863253 ... 0.90803004 0.88073949 0.74163265]\n", + " [0.98449615 1. 0.96352874 ... 0.95770189 0.93322371 0.82803429]\n", + " [0.91863253 0.96352874 1. ... 0.98530439 0.97703823 0.92845585]\n", + " ...\n", + " [0.90803004 0.95770189 0.98530439 ... 1. 0.99204562 0.94363326]\n", + " [0.88073949 0.93322371 0.97703823 ... 0.99204562 1. 0.96718938]\n", + " [0.74163265 0.82803429 0.92845585 ... 0.94363326 0.96718938 1. ]]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "1 gram matrices are calculated, 0 of which are ignored.\n", + "\n", + "3. Fitting and predicting using nested cross validation. This could really take a while...\n", + "\n", + "4. Getting final performance...\n", + "best_params_out: [{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }}]\n", + "best_params_in: [{'C': 3.1622776601683795}]\n", + "\n", + "best_val_perf: 0.5635714285714286\n", + "best_val_std: 0.020692049669866652\n", + "final_performance: [0.5376190476190476]\n", + "final_confidence: [0.07997917861814137]\n", + "train_performance: [0.5574466891133556]\n", + "train_std: [0.008328075153960232]\n", + "\n", + "time to calculate gram matrix with different hyper-params: 7.61±nans\n", + "time to calculate best gram matrix: 7.61±nans\n", + "total training time with all hyper-param choices: 9.71s\n", + "\n", + "params train_perf valid_perf test_perf gram_matrix_time\n", + "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------ ------------ ----------- ------------------\n", + "{'n_jobs': 8, 'C': '1.00e-10', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-10', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '1.00e-09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '1.00e-08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '1.00e-07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '1.00e-06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '1.00e-05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '1.00e-04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '1.00e-03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '1.00e-02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '1.00e-01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.55±0.05 0.54±0.11 7.61\n", + "{'n_jobs': 8, 'C': '3.16e-01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.41±0.07 0.37±0.07 0.35±0.05 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+00', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.49±0.04 0.49±0.04 0.42±0.15 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+00', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.56±0.01 0.56±0.02 0.54±0.08 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.48±0.01 0.49±0.02 0.50±0.15 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.46±0.02 0.46±0.02 0.50±0.16 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '3.16e+09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "{'n_jobs': 8, 'C': '1.00e+10', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.47±0.03 0.47±0.03 0.54±0.21 7.61\n", + "\n", + "\n", + "PAH\n", + "\n", + "--- This is a classification problem ---\n", + "\n", + "\n", + "I. Loading dataset from file...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "2. Calculating gram matrices. This could take a while...\n", + "\n", + " None edge weight specified. Set all weight to 1.\n", + "\n", + "\n", + " --- shortest path kernel matrix of size 94 built in 6.5481321811676025 seconds ---\n", + "\n", + "the gram matrix with parameters {'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} is: \n", + "[[1. 0.96353531 0.96592281 ... 0.8622094 0.87997676 0.87988951]\n", + " [0.96353531 1. 0.9971178 ... 0.96212799 0.97024435 0.97178508]\n", + " [0.96592281 0.9971178 1. ... 0.95944325 0.96816017 0.97260121]\n", + " ...\n", + " [0.8622094 0.96212799 0.95944325 ... 1. 0.99889548 0.99345489]\n", + " [0.87997676 0.97024435 0.96816017 ... 0.99889548 1. 0.9934214 ]\n", + " [0.87988951 0.97178508 0.97260121 ... 0.99345489 0.9934214 1. ]]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "1 gram matrices are calculated, 0 of which are ignored.\n", + "\n", + "3. Fitting and predicting using nested cross validation. This could really take a while...\n", + "\n", + "4. Getting final performance...\n", + "best_params_out: [{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }}, {'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }}]\n", + "best_params_in: [{'C': 31.622776601683793}, {'C': 100.0}]\n", + "\n", + "best_val_perf: 0.6420833333333335\n", + "best_val_std: 0.015945233736988702\n", + "final_performance: [0.6130000000000001, 0.6133333333333334]\n", + "final_confidence: [0.1274457288146741, 0.1279367659898984]\n", + "train_performance: [0.6412754385964912, 0.6412754385964912]\n", + "train_std: [0.015228857126704994, 0.015228857126704994]\n", + "\n", + "time to calculate gram matrix with different hyper-params: 6.55±nans\n", + "time to calculate best gram matrix: 6.55±0.00s\n", + "total training time with all hyper-param choices: 8.87s\n", + "\n", + "params train_perf valid_perf test_perf gram_matrix_time\n", + "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------ ------------ ----------- ------------------\n", + "{'n_jobs': 8, 'C': '1.00e-10', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-10', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e-09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e-08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e-07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e-06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e-05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e-04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e-03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e-02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e-01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.63±0.02 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e-01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.01 0.64±0.02 0.57±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+00', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+00', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '3.16e+09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "{'n_jobs': 8, 'C': '1.00e+10', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.02 0.64±0.02 0.61±0.13 6.55\n", + "\n", + "\n", + "MUTAG\n", + "\n", + "--- This is a classification problem ---\n", + "\n", + "\n", + "I. Loading dataset from file...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "2. Calculating gram matrices. This could take a while...\n", + "\n", + " None edge weight specified. Set all weight to 1.\n", + "\n", + "\n", + " --- shortest path kernel matrix of size 188 built in 67.91289067268372 seconds ---\n", + "\n", + "the gram matrix with parameters {'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} is: \n", + "[[1. 0.68780488 0.977912 ... 0.72072063 0.79304207 0.6640214 ]\n", + " [0.68780488 1. 0.72921233 ... 0.79419383 0.80547177 0.77837484]\n", + " [0.977912 0.72921233 1. ... 0.79338054 0.87106629 0.74397578]\n", + " ...\n", + " [0.72072063 0.79419383 0.79338054 ... 1. 0.95662951 0.94918589]\n", + " [0.79304207 0.80547177 0.87106629 ... 0.95662951 1. 0.93460209]\n", + " [0.6640214 0.77837484 0.74397578 ... 0.94918589 0.93460209 1. ]]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "1 gram matrices are calculated, 0 of which are ignored.\n", + "\n", + "3. Fitting and predicting using nested cross validation. This could really take a while...\n", + "\n", + "4. Getting final performance...\n", + "best_params_out: [{'n_jobs': 8, 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }}]\n", + "best_params_in: [{'C': 0.1}]\n", + "\n", + "best_val_perf: 0.7621936274509803\n", + "best_val_std: 0.019636735759586195\n", + "final_performance: [0.8019298245614036]\n", + "final_confidence: [0.09742587536592802]\n", + "train_performance: [0.7818095688567825]\n", + "train_std: [0.015873629836738855]\n", + "\n", + "time to calculate gram matrix with different hyper-params: 67.91±nans\n", + "time to calculate best gram matrix: 67.91±nans\n", + "total training time with all hyper-param choices: 71.04s\n", + "\n", + "params train_perf valid_perf test_perf gram_matrix_time\n", + "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------ ------------ ----------- ------------------\n", + "{'n_jobs': 8, 'C': '1.00e-10', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-10', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '1.00e-09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '1.00e-08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '1.00e-07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '1.00e-06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '1.00e-05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '1.00e-04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '1.00e-03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '1.00e-02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.66±0.01 0.66±0.01 0.72±0.06 67.91\n", + "{'n_jobs': 8, 'C': '1.00e-01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.78±0.02 0.76±0.02 0.80±0.10 67.91\n", + "{'n_jobs': 8, 'C': '3.16e-01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.45±0.03 0.46±0.03 0.41±0.11 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+00', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.35±0.01 0.35±0.01 0.30±0.07 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+00', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.46±0.02 0.46±0.02 0.41±0.11 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.54±0.03 0.54±0.03 0.49±0.09 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+01', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.58±0.02 0.58±0.03 0.58±0.13 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.60±0.03 0.60±0.03 0.62±0.15 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+02', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.65±0.19 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+03', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+04', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+05', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+06', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+07', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+08', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '3.16e+09', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "{'n_jobs': 8, 'C': '1.00e+10', 'node_kernels': {'mix': functools.partial(, , ), 'symb': , 'nsymb': }} 0.64±0.07 0.64±0.08 0.66±0.19 67.91\n", + "\n", + "\n", + "Letter-med\n", + "\n", + "--- This is a classification problem ---\n", + "\n", + "\n", + "I. Loading dataset from file...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "2. Calculating gram matrices. This could take a while...\n", + "\n", + " None edge weight specified. Set all weight to 1.\n", + "\n", + "\n", + " 9 graphs are removed as they don't contain edges.\n", + "\n" ] } ], @@ -155,34 +770,40 @@ "%matplotlib inline\n", "import functools\n", "from libs import *\n", + "import multiprocessing\n", + "from sklearn.metrics.pairwise import rbf_kernel\n", + "\n", "from pygraph.kernels.spKernel import spkernel\n", "from pygraph.utils.kernels import deltakernel, kernelsum\n", - "from sklearn.metrics.pairwise import rbf_kernel\n", "\n", "dslist = [ \n", " {'name': 'Acyclic', 'dataset': '../datasets/acyclic/dataset_bps.ds', 'task': 'regression'}, # node symb\n", - "# {'name': 'COIL-DEL', 'dataset': '../datasets/COIL-DEL/COIL-DEL_A.txt'}, # edge symb, node nsymb\n", - "# {'name': 'PAH', 'dataset': '../datasets/PAH/dataset.ds',}, # unlabeled\n", - "# {'name': 'Mutagenicity', 'dataset': '../datasets/Mutagenicity/Mutagenicity_A.txt'}, # node/edge symb\n", - "# {'name': 'MAO', 'dataset': '../datasets/MAO/dataset.ds',}, # node/edge symb\n", - "# {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG.mat',\n", - "# 'extra_params': {'am_sp_al_nl_el': [0, 0, 3, 1, 2]}}, # node/edge symb\n", - "# {'name': 'Alkane', 'dataset': '../datasets/Alkane/dataset.ds', 'task': 'regression', \n", - "# 'dataset_y': '../datasets/Alkane/dataset_boiling_point_names.txt',}, # contains single node graph, node symb\n", - "# {'name': 'BZR', 'dataset': '../datasets/BZR_txt/BZR_A_sparse.txt'}, # node symb/nsymb\n", - "# {'name': 'COX2', 'dataset': '../datasets/COX2_txt/COX2_A_sparse.txt'}, # node symb/nsymb\n", - "# {'name': 'ENZYMES', 'dataset': '../datasets/ENZYMES_txt/ENZYMES_A_sparse.txt'}, # node symb/nsymb\n", - "# {'name': 'DHFR', 'dataset': '../datasets/DHFR_txt/DHFR_A_sparse.txt'}, # node symb/nsymb\n", - "# {'name': 'SYNTHETIC', 'dataset': '../datasets/SYNTHETIC_txt/SYNTHETIC_A_sparse.txt'}, # node symb/nsymb\n", - "# {'name': 'MSRC9', 'dataset': '../datasets/MSRC_9_txt/MSRC_9_A.txt'}, # node symb\n", - "# {'name': 'MSRC21', 'dataset': '../datasets/MSRC_21_txt/MSRC_21_A.txt'}, # node symb\n", - "# {'name': 'FIRSTMM_DB', 'dataset': '../datasets/FIRSTMM_DB/FIRSTMM_DB_A.txt'}, # node symb/nsymb ,edge nsymb\n", + " {'name': 'Alkane', 'dataset': '../datasets/Alkane/dataset.ds', 'task': 'regression', \n", + " 'dataset_y': '../datasets/Alkane/dataset_boiling_point_names.txt',}, # contains single node graph, node symb\n", + " {'name': 'MAO', 'dataset': '../datasets/MAO/dataset.ds',}, # node/edge symb\n", + " {'name': 'PAH', 'dataset': '../datasets/PAH/dataset.ds',}, # unlabeled\n", + " {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG.mat',\n", + " 'extra_params': {'am_sp_al_nl_el': [0, 0, 3, 1, 2]}}, # node/edge symb\n", + " {'name': 'Letter-med', 'dataset': '../datasets/Letter-med/Letter-med_A.txt'},\n", + " {'name': 'ENZYMES', 'dataset': '../datasets/ENZYMES_txt/ENZYMES_A_sparse.txt'}, # node symb/nsymb\n", + " {'name': 'Mutagenicity', 'dataset': '../datasets/Mutagenicity/Mutagenicity_A.txt'}, # node/edge symb\n", + " {'name': 'D&D', 'dataset': '../datasets/D&D/DD.mat',\n", + " 'extra_params': {'am_sp_al_nl_el': [0, 1, 2, 1, -1]}}, # node symb\n", "\n", - "# {'name': 'PROTEINS', 'dataset': '../datasets/PROTEINS_txt/PROTEINS_A_sparse.txt'}, # node symb/nsymb\n", - "# {'name': 'PROTEINS_full', 'dataset': '../datasets/PROTEINS_full_txt/PROTEINS_full_A_sparse.txt'}, # node symb/nsymb\n", - "# {'name': 'D&D', 'dataset': '../datasets/D&D/DD.mat',\n", - "# 'extra_params': {'am_sp_al_nl_el': [0, 1, 2, 1, -1]}}, # node symb\n", - "# {'name': 'AIDS', 'dataset': '../datasets/AIDS/AIDS_A.txt'}, # node symb/nsymb, edge symb\n", + "# # # {'name': 'COIL-DEL', 'dataset': '../datasets/COIL-DEL/COIL-DEL_A.txt'}, # edge symb, node nsymb\n", + "# # # {'name': 'BZR', 'dataset': '../datasets/BZR_txt/BZR_A_sparse.txt'}, # node symb/nsymb\n", + "# # # {'name': 'COX2', 'dataset': '../datasets/COX2_txt/COX2_A_sparse.txt'}, # node symb/nsymb\n", + "# {'name': 'Fingerprint', 'dataset': '../datasets/Fingerprint/Fingerprint_A.txt'},\n", + "# \n", + "# # {'name': 'DHFR', 'dataset': '../datasets/DHFR_txt/DHFR_A_sparse.txt'}, # node symb/nsymb\n", + "# # {'name': 'SYNTHETIC', 'dataset': '../datasets/SYNTHETIC_txt/SYNTHETIC_A_sparse.txt'}, # node symb/nsymb\n", + "# # {'name': 'MSRC9', 'dataset': '../datasets/MSRC_9_txt/MSRC_9_A.txt'}, # node symb\n", + "# # {'name': 'MSRC21', 'dataset': '../datasets/MSRC_21_txt/MSRC_21_A.txt'}, # node symb\n", + "# # {'name': 'FIRSTMM_DB', 'dataset': '../datasets/FIRSTMM_DB/FIRSTMM_DB_A.txt'}, # node symb/nsymb ,edge nsymb\n", + "\n", + "# # {'name': 'PROTEINS', 'dataset': '../datasets/PROTEINS_txt/PROTEINS_A_sparse.txt'}, # node symb/nsymb\n", + "# # {'name': 'PROTEINS_full', 'dataset': '../datasets/PROTEINS_full_txt/PROTEINS_full_A_sparse.txt'}, # node symb/nsymb\n", + "# # {'name': 'AIDS', 'dataset': '../datasets/AIDS/AIDS_A.txt'}, # node symb/nsymb, edge symb\n", "# {'name': 'NCI1', 'dataset': '../datasets/NCI1/NCI1.mat',\n", "# 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, # node symb\n", "# {'name': 'NCI109', 'dataset': '../datasets/NCI109/NCI109.mat',\n", @@ -206,20 +827,29 @@ " print()\n", " print(ds['name'])\n", " model_selection_for_precomputed_kernel(\n", - " ds['dataset'], estimator, param_grid_precomputed, \n", + " ds['dataset'], \n", + " estimator, \n", + " param_grid_precomputed, \n", " (param_grid[1] if ('task' in ds and ds['task'] == 'regression') else param_grid[0]), \n", - " (ds['task'] if 'task' in ds else 'classification'), NUM_TRIALS=30,\n", + " (ds['task'] if 'task' in ds else 'classification'), \n", + " NUM_TRIALS=30,\n", " datafile_y=(ds['dataset_y'] if 'dataset_y' in ds else None),\n", " extra_params=(ds['extra_params'] if 'extra_params' in ds else None),\n", - " ds_name=ds['name'])\n", + " ds_name=ds['name'],\n", + " n_jobs=multiprocessing.cpu_count())\n", " \n", - "# %lprun -f spkernel \\\n", + "# %lprun -f model_selection_for_precomputed_kernel \\\n", "# model_selection_for_precomputed_kernel( \\\n", - "# ds['dataset'], estimator, param_grid_precomputed, \\\n", + "# ds['dataset'], \\\n", + "# estimator, \\\n", + "# param_grid_precomputed, \\\n", "# (param_grid[1] if ('task' in ds and ds['task'] == 'regression') else param_grid[0]), \\\n", - "# (ds['task'] if 'task' in ds else 'classification'), NUM_TRIALS=30, \\\n", + "# (ds['task'] if 'task' in ds else 'classification'), \\\n", + "# NUM_TRIALS=30, \\\n", "# datafile_y=(ds['dataset_y'] if 'dataset_y' in ds else None), \\\n", - "# extra_params=(ds['extra_params'] if 'extra_params' in ds else None))\n", + "# extra_params=(ds['extra_params'] if 'extra_params' in ds else None), \\\n", + "# ds_name=ds['name'], \\\n", + "# n_jobs=multiprocessing.cpu_count()) \n", " print()" ] }, @@ -235,129 +865,54 @@ "\n", "--- This is a regression problem ---\n", "\n", - "1. Loading dataset from file...\n", "\n", - "2. Calculating gram matrices. This could take a while...\n", - "--- shortest path kernel matrix of size 183 built in 13.54222846031189 seconds ---\n", + "I. Loading dataset from file...\n", "\n", - "gram matrix with parameters {} is: \n", - "[[1. 0.23570226 1. ... 0.07784989 0.07784989 0.07784989]\n", - " [0.23570226 1. 0.23570226 ... 0. 0. 0.16514456]\n", - " [1. 0.23570226 1. ... 0.07784989 0.07784989 0.07784989]\n", - " ...\n", - " [0.07784989 0. 0.07784989 ... 1. 0.38181818 0.12727273]\n", - " [0.07784989 0. 0.07784989 ... 0.38181818 1. 0.12727273]\n", - " [0.07784989 0.16514456 0.07784989 ... 0.12727273 0.12727273 1. ]]\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "2. Calculating gram matrices. This could take a while...\n", "\n", - "3. Fitting and predicting using nested cross validation. This could really take a while...\n", - "calculate performance: 0%| | 2/1230 [00:00<01:34, 12.98it/s]" + " None edge weight specified. Set all weight to 1.\n", + "\n" ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/ljia/.local/lib/python3.5/site-packages/sklearn/linear_model/ridge.py:154: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.\n", - " warnings.warn(\"Singular matrix in solving dual problem. Using \"\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " \n", - "4. Getting final performances...\n", - "\n", - "best_params_out: [{}]\n", - "best_params_in: [{'alpha': 1.0}]\n", - "\n", - "best_val_perf: 38.310091123281964\n", - "best_val_std: 0.921980968599538\n", - "final_performance: 39.40204478386939\n", - "final_confidence: 6.323960893696847\n", - "train_performance: 28.772353915665963\n", - "train_std: 0.6079886263011134\n", - "\n", - "time to calculate gram matrix with different hyperpapams: 13.54±nan\n", - "time to calculate best gram matrix: 13.54222846031189 s\n", - "\n", - "params train_perf valid_perf test_perf gram_matrix_time\n", - "--------------------- -------------- -------------- -------------- ------------------\n", - "{'alpha': '1.00e-01'} 38.29±21.43 90.94±85.41 95.89±109.61 13.54\n", - "{'alpha': '1.12e-01'} 41.08±38.73 87.86±80.28 123.11±281.23 13.54\n", - "{'alpha': '1.26e-01'} 32.82±6.74 65.09±20.13 71.11±39.78 13.54\n", - "{'alpha': '1.41e-01'} 30.31±2.59 57.03±8.94 59.35±14.38 13.54\n", - "{'alpha': '1.58e-01'} 29.75±2.56 54.54±9.19 56.87±14.53 13.54\n", - "{'alpha': '1.78e-01'} 29.95±7.00 57.65±46.21 56.04±27.59 13.54\n", - "{'alpha': '2.00e-01'} 28.41±1.44 48.10±5.22 49.80±8.33 13.54\n", - "{'alpha': '2.24e-01'} 28.07±1.22 46.08±2.85 47.97±7.38 13.54\n", - "{'alpha': '2.51e-01'} 27.83±1.10 44.68±2.22 46.57±6.89 13.54\n", - "{'alpha': '2.82e-01'} 27.65±1.00 43.54±1.90 45.39±6.54 13.54\n", - "{'alpha': '3.16e-01'} 27.51±0.92 42.57±1.68 44.36±6.28 13.54\n", - "{'alpha': '3.55e-01'} 27.42±0.85 41.74±1.53 43.45±6.09 13.54\n", - "{'alpha': '3.98e-01'} 27.38±0.80 41.01±1.40 42.66±5.97 13.54\n", - "{'alpha': '4.47e-01'} 27.37±0.75 40.38±1.30 41.96±5.91 13.54\n", - "{'alpha': '5.01e-01'} 27.41±0.72 39.84±1.22 41.35±5.89 13.54\n", - "{'alpha': '5.62e-01'} 27.50±0.69 39.39±1.15 40.82±5.91 13.54\n", - "{'alpha': '6.31e-01'} 27.64±0.66 39.02±1.09 40.38±5.96 13.54\n", - "{'alpha': '7.08e-01'} 27.83±0.64 38.72±1.04 40.02±6.03 13.54\n", - "{'alpha': '7.94e-01'} 28.08±0.63 38.51±0.99 39.73±6.11 13.54\n", - "{'alpha': '8.91e-01'} 28.39±0.62 38.37±0.95 39.53±6.21 13.54\n", - "{'alpha': '1.00e+00'} 28.77±0.61 38.31±0.92 39.40±6.32 13.54\n", - "{'alpha': '1.12e+00'} 29.22±0.60 38.33±0.89 39.36±6.44 13.54\n", - "{'alpha': '1.26e+00'} 29.74±0.60 38.44±0.87 39.40±6.56 13.54\n", - "{'alpha': '1.41e+00'} 30.34±0.59 38.63±0.85 39.53±6.68 13.54\n", - "{'alpha': '1.58e+00'} 32.30±4.94 40.59±6.49 41.14±9.07 13.54\n", - "{'alpha': '1.78e+00'} 65.08±118.93 70.87±110.34 70.05±105.01 13.54\n", - "{'alpha': '2.00e+00'} 61.14±47.95 63.56±40.28 63.69±32.83 13.54\n", - "{'alpha': '2.24e+00'} 517.26±2507.14 514.17±2482.82 385.18±1762.10 13.54\n", - "{'alpha': '2.51e+00'} 38.51±2.50 43.44±2.15 44.18±8.19 13.54\n", - "{'alpha': '2.82e+00'} 37.61±0.88 42.78±0.93 43.42±7.80 13.54\n", - "{'alpha': '3.16e+00'} 38.17±0.62 43.21±0.76 43.79±7.82 13.54\n", - "{'alpha': '3.55e+00'} 39.19±0.57 44.01±0.73 44.54±7.90 13.54\n", - "{'alpha': '3.98e+00'} 40.46±0.56 45.03±0.73 45.51±8.00 13.54\n", - "{'alpha': '4.47e+00'} 41.92±0.56 46.23±0.74 46.66±8.13 13.54\n", - "{'alpha': '5.01e+00'} 43.55±0.56 47.59±0.75 47.98±8.26 13.54\n", - "{'alpha': '5.62e+00'} 45.34±0.57 49.12±0.76 49.46±8.40 13.54\n", - "{'alpha': '6.31e+00'} 47.28±0.57 50.81±0.77 51.11±8.54 13.54\n", - "{'alpha': '7.08e+00'} 49.37±0.57 52.66±0.78 52.92±8.69 13.54\n", - "{'alpha': '7.94e+00'} 51.60±0.57 54.67±0.79 54.89±8.84 13.54\n", - "{'alpha': '8.91e+00'} 53.99±0.57 56.84±0.79 57.02±8.99 13.54\n", - "{'alpha': '1.00e+01'} 56.52±0.57 59.17±0.79 59.32±9.13 13.54\n" + "ename": "TypeError", + "evalue": "'NoneType' object is not subscriptable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mRemoteTraceback\u001b[0m Traceback (most recent call last)", + "\u001b[0;31mRemoteTraceback\u001b[0m: \n\"\"\"\nTraceback (most recent call last):\n File \"/usr/lib/python3.5/multiprocessing/pool.py\", line 119, in worker\n result = (True, func(*args, **kwds))\n File \"/usr/lib/python3.5/multiprocessing/pool.py\", line 44, in mapstar\n return list(map(*args))\n File \"../pygraph/kernels/spKernel.py\", line 359, in spkernel_do\n kn = node_kernels['symb']\nTypeError: 'NoneType' object is not subscriptable\n\"\"\"", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m model_selection_for_precomputed_kernel(datafile, estimator, param_grid_precomputed, param_grid, \n\u001b[0;32m---> 15\u001b[0;31m 'regression', NUM_TRIALS=30)\n\u001b[0m", + "\u001b[0;32m/media/ljia/DATA/research-repo/codes/Linlin/py-graph/pygraph/utils/model_selection_precomputed.py\u001b[0m in \u001b[0;36mmodel_selection_for_precomputed_kernel\u001b[0;34m(datafile, estimator, param_grid_precomputed, param_grid, model_type, NUM_TRIALS, datafile_y, extra_params, ds_name, n_jobs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams_out\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparam_list_precomputed\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[0mparams_out\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'n_jobs'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mn_jobs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 122\u001b[0;31m \u001b[0mrtn_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mestimator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mparams_out\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 123\u001b[0m \u001b[0mKmatrix\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrtn_data\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0mcurrent_run_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrtn_data\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/media/ljia/DATA/research-repo/codes/Linlin/py-graph/pygraph/kernels/spKernel.py\u001b[0m in \u001b[0;36mspkernel\u001b[0;34m(node_label, edge_weight, node_kernels, n_jobs, *args)\u001b[0m\n\u001b[1;32m 97\u001b[0m \u001b[0mdo_partial\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpartial\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mspkernel_do\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mGn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mds_attrs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnode_label\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnode_kernels\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[0mitr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcombinations_with_replacement\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mGn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 99\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkernel\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpool\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdo_partial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mitr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtotal\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 100\u001b[0m \u001b[0mKmatrix\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkernel\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[0mKmatrix\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkernel\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/lib/python3.5/multiprocessing/pool.py\u001b[0m in \u001b[0;36mmap\u001b[0;34m(self, func, iterable, chunksize)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[0;32min\u001b[0m \u001b[0ma\u001b[0m \u001b[0mlist\u001b[0m \u001b[0mthat\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mreturned\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 259\u001b[0m '''\n\u001b[0;32m--> 260\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_map_async\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmapstar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mchunksize\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 261\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 262\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mstarmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mchunksize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/lib/python3.5/multiprocessing/pool.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 606\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 607\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 608\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 609\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 610\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_set\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: 'NoneType' object is not subscriptable" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python3.5/dist-packages/numpy/core/_methods.py:135: RuntimeWarning: Degrees of freedom <= 0 for slice\n", - " keepdims=keepdims)\n", - "/usr/local/lib/python3.5/dist-packages/numpy/core/_methods.py:127: RuntimeWarning: invalid value encountered in double_scalars\n", - " ret = ret.dtype.type(ret / rcount)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\r", - "calculate performance: 100%|██████████| 1230/1230 [01:20<00:00, 19.86it/s]" + "Process ForkPoolWorker-1:\n", + "Traceback (most recent call last):\n", + " File \"/usr/lib/python3.5/multiprocessing/process.py\", line 249, in _bootstrap\n", + " self.run()\n", + " File \"/usr/lib/python3.5/multiprocessing/process.py\", line 93, in run\n", + " self._target(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.5/multiprocessing/pool.py\", line 108, in worker\n", + " task = get()\n", + " File \"/usr/lib/python3.5/multiprocessing/queues.py\", line 343, in get\n", + " res = self._reader.recv_bytes()\n", + " File \"/usr/lib/python3.5/multiprocessing/connection.py\", line 216, in recv_bytes\n", + " buf = self._recv_bytes(maxlength)\n", + " File \"/usr/lib/python3.5/multiprocessing/connection.py\", line 407, in _recv_bytes\n", + " buf = self._recv(4)\n", + " File \"/usr/lib/python3.5/multiprocessing/connection.py\", line 379, in _recv\n", + " chunk = read(handle, remaining)\n", + "KeyboardInterrupt\n" ] } ], diff --git a/notebooks/run_spkernel.py b/notebooks/run_spkernel.py index 010d93f..e60671f 100644 --- a/notebooks/run_spkernel.py +++ b/notebooks/run_spkernel.py @@ -1,56 +1,157 @@ +import functools from libs import * from pygraph.kernels.spKernel import spkernel +from pygraph.utils.kernels import deltakernel, kernelsum +from sklearn.metrics.pairwise import rbf_kernel -dslist = [ -# {'name': 'Acyclic', 'dataset': '../datasets/acyclic/dataset_bps.ds', 'task': 'regression'}, # node_labeled -# {'name': 'COIL-DEL', 'dataset': '../datasets/COIL-DEL/COIL-DEL_A.txt'}, # edge_labeled +# dslist = [ +# {'name': 'Acyclic', 'dataset': '../datasets/acyclic/dataset_bps.ds', 'task': 'regression'}, # node symb +# # {'name': 'COIL-DEL', 'dataset': '../datasets/COIL-DEL/COIL-DEL_A.txt'}, # edge symb, node nsymb # {'name': 'PAH', 'dataset': '../datasets/PAH/dataset.ds',}, # unlabeled - {'name': 'Mutagenicity', 'dataset': '../datasets/Mutagenicity/Mutagenicity_A.txt'}, # fully_labeled -# {'name': 'MAO', 'dataset': '../datasets/MAO/dataset.ds',}, - +# {'name': 'MAO', 'dataset': '../datasets/MAO/dataset.ds',}, # node/edge symb # {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG.mat', -# 'extra_params': {'am_sp_al_nl_el': [0, 0, 3, 1, 2]}}, -# {'name': 'Alkane', 'dataset': '../datasets/Alkane/dataset.ds', 'task': 'regression', -# 'dataset_y': '../datasets/Alkane/dataset_boiling_point_names.txt',}, -# {'name': 'BZR', 'dataset': '../datasets/BZR_txt/BZR_A_sparse.txt'}, -# {'name': 'COX2', 'dataset': '../datasets/COX2_txt/COX2_A_sparse.txt'}, - {'name': 'ENZYMES', 'dataset': '../datasets/ENZYMES_txt/ENZYMES_A_sparse.txt'}, -# {'name': 'DHFR', 'dataset': '../datasets/DHFR_txt/DHFR_A_sparse.txt'}, -# {'name': 'SYNTHETIC', 'dataset': '../datasets/SYNTHETIC_txt/SYNTHETIC_A_sparse.txt'}, -# {'name': 'MSRC9', 'dataset': '../datasets/MSRC_9_txt/MSRC_9_A.txt'}, -# {'name': 'MSRC21', 'dataset': '../datasets/MSRC_21_txt/MSRC_21_A.txt'}, -# {'name': 'FIRSTMM_DB', 'dataset': '../datasets/FIRSTMM_DB/FIRSTMM_DB_A.txt'}, - -# {'name': 'PROTEINS', 'dataset': '../datasets/PROTEINS_txt/PROTEINS_A_sparse.txt'}, -# {'name': 'PROTEINS_full', 'dataset': '../datasets/PROTEINS_full_txt/PROTEINS_full_A_sparse.txt'}, +# 'extra_params': {'am_sp_al_nl_el': [0, 0, 3, 1, 2]}}, # node/edge symb +# {'name': 'Alkane', 'dataset': '../datasets/Alkane/dataset.ds', 'task': 'regression', +# 'dataset_y': '../datasets/Alkane/dataset_boiling_point_names.txt',}, # contains single node graph, node symb +# # {'name': 'BZR', 'dataset': '../datasets/BZR_txt/BZR_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'COX2', 'dataset': '../datasets/COX2_txt/COX2_A_sparse.txt'}, # node symb/nsymb +# {'name': 'Mutagenicity', 'dataset': '../datasets/Mutagenicity/Mutagenicity_A.txt'}, # node/edge symb +# {'name': 'ENZYMES', 'dataset': '../datasets/ENZYMES_txt/ENZYMES_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'Fingerprint', 'dataset': '../datasets/Fingerprint/Fingerprint_A.txt'}, +# {'name': 'Letter-med', 'dataset': '../datasets/Letter-med/Letter-med_A.txt'}, +# # {'name': 'DHFR', 'dataset': '../datasets/DHFR_txt/DHFR_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'SYNTHETIC', 'dataset': '../datasets/SYNTHETIC_txt/SYNTHETIC_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'MSRC9', 'dataset': '../datasets/MSRC_9_txt/MSRC_9_A.txt'}, # node symb +# # {'name': 'MSRC21', 'dataset': '../datasets/MSRC_21_txt/MSRC_21_A.txt'}, # node symb +# # {'name': 'FIRSTMM_DB', 'dataset': '../datasets/FIRSTMM_DB/FIRSTMM_DB_A.txt'}, # node symb/nsymb ,edge nsymb + +# # {'name': 'PROTEINS', 'dataset': '../datasets/PROTEINS_txt/PROTEINS_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'PROTEINS_full', 'dataset': '../datasets/PROTEINS_full_txt/PROTEINS_full_A_sparse.txt'}, # node symb/nsymb # {'name': 'D&D', 'dataset': '../datasets/D&D/DD.mat', -# 'extra_params': {'am_sp_al_nl_el': [0, 1, 2, 1, -1]}}, -# {'name': 'AIDS', 'dataset': '../datasets/AIDS/AIDS_A.txt'}, -# {'name': 'NCI1', 'dataset': '../datasets/NCI1/NCI1.mat', -# 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, -# {'name': 'NCI109', 'dataset': '../datasets/NCI109/NCI109.mat', -# 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, -# {'name': 'NCI-HIV', 'dataset': '../datasets/NCI-HIV/AIDO99SD.sdf', -# 'dataset_y': '../datasets/NCI-HIV/aids_conc_may04.txt',}, - -# # not working below -# {'name': 'PTC_FM', 'dataset': '../datasets/PTC/Train/FM.ds',}, -# {'name': 'PTC_FR', 'dataset': '../datasets/PTC/Train/FR.ds',}, -# {'name': 'PTC_MM', 'dataset': '../datasets/PTC/Train/MM.ds',}, -# {'name': 'PTC_MR', 'dataset': '../datasets/PTC/Train/MR.ds',}, -] +# 'extra_params': {'am_sp_al_nl_el': [0, 1, 2, 1, -1]}}, # node symb +# # {'name': 'AIDS', 'dataset': '../datasets/AIDS/AIDS_A.txt'}, # node symb/nsymb, edge symb +# # {'name': 'NCI1', 'dataset': '../datasets/NCI1/NCI1.mat', +# # 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, # node symb +# # {'name': 'NCI109', 'dataset': '../datasets/NCI109/NCI109.mat', +# # 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, # node symb +# # {'name': 'NCI-HIV', 'dataset': '../datasets/NCI-HIV/AIDO99SD.sdf', +# # 'dataset_y': '../datasets/NCI-HIV/aids_conc_may04.txt',}, # node/edge symb + +# # # not working below +# # {'name': 'PTC_FM', 'dataset': '../datasets/PTC/Train/FM.ds',}, +# # {'name': 'PTC_FR', 'dataset': '../datasets/PTC/Train/FR.ds',}, +# # {'name': 'PTC_MM', 'dataset': '../datasets/PTC/Train/MM.ds',}, +# # {'name': 'PTC_MR', 'dataset': '../datasets/PTC/Train/MR.ds',}, +# ] + +import ast +ds = ast.literal_eval(sys.argv[1]) + estimator = spkernel -param_grid_precomputed = {} -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']) - 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)) - print() +mixkernel = functools.partial(kernelsum, deltakernel, rbf_kernel) +param_grid_precomputed = { + 'node_kernels': [{ + 'symb': deltakernel, + 'nsymb': rbf_kernel, + 'mix': mixkernel + }] +} +param_grid = [{ + 'C': np.logspace(-10, 10, num=41, base=10) +}, { + 'alpha': np.logspace(-10, 10, num=41, base=10) +}] + +print() +print(ds['name']) +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']) + +# %lprun -f spkernel \ +# 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)) +print() + +# import functools +# from libs import * +# from pygraph.kernels.spKernel import spkernel +# from pygraph.utils.kernels import deltakernel, kernelsum +# from sklearn.metrics.pairwise import rbf_kernel + +# dslist = [ +# {'name': 'Acyclic', 'dataset': '../datasets/acyclic/dataset_bps.ds', 'task': 'regression'}, # node symb +# # {'name': 'COIL-DEL', 'dataset': '../datasets/COIL-DEL/COIL-DEL_A.txt'}, # edge symb, node nsymb +# # {'name': 'PAH', 'dataset': '../datasets/PAH/dataset.ds',}, # unlabeled +# # {'name': 'MAO', 'dataset': '../datasets/MAO/dataset.ds',}, # node/edge symb +# # {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG.mat', +# # 'extra_params': {'am_sp_al_nl_el': [0, 0, 3, 1, 2]}}, # node/edge symb +# # {'name': 'Alkane', 'dataset': '../datasets/Alkane/dataset.ds', 'task': 'regression', +# # 'dataset_y': '../datasets/Alkane/dataset_boiling_point_names.txt',}, # contains single node graph, node symb +# # {'name': 'BZR', 'dataset': '../datasets/BZR_txt/BZR_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'COX2', 'dataset': '../datasets/COX2_txt/COX2_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'Mutagenicity', 'dataset': '../datasets/Mutagenicity/Mutagenicity_A.txt'}, # node/edge symb +# # {'name': 'ENZYMES', 'dataset': '../datasets/ENZYMES_txt/ENZYMES_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'Fingerprint', 'dataset': '../datasets/Fingerprint/Fingerprint_A.txt'}, +# # {'name': 'Letter-med', 'dataset': '../datasets/Letter-med/Letter-med_A.txt'}, +# # {'name': 'DHFR', 'dataset': '../datasets/DHFR_txt/DHFR_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'SYNTHETIC', 'dataset': '../datasets/SYNTHETIC_txt/SYNTHETIC_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'MSRC9', 'dataset': '../datasets/MSRC_9_txt/MSRC_9_A.txt'}, # node symb +# # {'name': 'MSRC21', 'dataset': '../datasets/MSRC_21_txt/MSRC_21_A.txt'}, # node symb +# # {'name': 'FIRSTMM_DB', 'dataset': '../datasets/FIRSTMM_DB/FIRSTMM_DB_A.txt'}, # node symb/nsymb ,edge nsymb + +# # {'name': 'PROTEINS', 'dataset': '../datasets/PROTEINS_txt/PROTEINS_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'PROTEINS_full', 'dataset': '../datasets/PROTEINS_full_txt/PROTEINS_full_A_sparse.txt'}, # node symb/nsymb +# # {'name': 'D&D', 'dataset': '../datasets/D&D/DD.mat', +# # 'extra_params': {'am_sp_al_nl_el': [0, 1, 2, 1, -1]}}, # node symb +# # {'name': 'AIDS', 'dataset': '../datasets/AIDS/AIDS_A.txt'}, # node symb/nsymb, edge symb +# # {'name': 'NCI1', 'dataset': '../datasets/NCI1/NCI1.mat', +# # 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, # node symb +# # {'name': 'NCI109', 'dataset': '../datasets/NCI109/NCI109.mat', +# # 'extra_params': {'am_sp_al_nl_el': [1, 1, 2, 0, -1]}}, # node symb +# # {'name': 'NCI-HIV', 'dataset': '../datasets/NCI-HIV/AIDO99SD.sdf', +# # 'dataset_y': '../datasets/NCI-HIV/aids_conc_may04.txt',}, # node/edge symb + +# # # not working below +# # {'name': 'PTC_FM', 'dataset': '../datasets/PTC/Train/FM.ds',}, +# # {'name': 'PTC_FR', 'dataset': '../datasets/PTC/Train/FR.ds',}, +# # {'name': 'PTC_MM', 'dataset': '../datasets/PTC/Train/MM.ds',}, +# # {'name': 'PTC_MR', 'dataset': '../datasets/PTC/Train/MR.ds',}, +# ] +# estimator = spkernel +# mixkernel = functools.partial(kernelsum, deltakernel, rbf_kernel) +# param_grid_precomputed = {'node_kernels': [{'symb': deltakernel, 'nsymb': rbf_kernel, 'mix': mixkernel}]} +# 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']) +# 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']) + +# # %lprun -f spkernel \ +# # 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)) +# print() diff --git a/pygraph/kernels/.#commonWalkKernel.py b/pygraph/kernels/.#commonWalkKernel.py deleted file mode 120000 index 99c68c9..0000000 --- a/pygraph/kernels/.#commonWalkKernel.py +++ /dev/null @@ -1 +0,0 @@ -ljia@ljia-Precision-7520.4716:1530265749 \ No newline at end of file diff --git a/pygraph/kernels/spKernel.py b/pygraph/kernels/spKernel.py index 28356b6..d286d37 100644 --- a/pygraph/kernels/spKernel.py +++ b/pygraph/kernels/spKernel.py @@ -9,6 +9,9 @@ sys.path.insert(0, "../") from tqdm import tqdm import time from itertools import combinations_with_replacement, product +from functools import partial +from joblib import Parallel, delayed +from multiprocessing import Pool import networkx as nx import numpy as np @@ -17,7 +20,11 @@ from pygraph.utils.utils import getSPGraph from pygraph.utils.graphdataset import get_dataset_attributes -def spkernel(*args, node_label='atom', edge_weight=None, node_kernels=None): +def spkernel(*args, + node_label='atom', + edge_weight=None, + node_kernels=None, + n_jobs=None): """Calculate shortest-path kernels between graphs. Parameters @@ -70,180 +77,344 @@ def spkernel(*args, node_label='atom', edge_weight=None, node_kernels=None): if len(Gn) != len_gn: print('\n %d graphs are removed as they don\'t contain edges.\n' % (len_gn - len(Gn))) - start_time = time.time() + pool = Pool(n_jobs) # get shortest path graphs of Gn - Gn = [ - getSPGraph(G, edge_weight=edge_weight) - for G in tqdm(Gn, desc='getting sp graphs', file=sys.stdout) - ] + getsp_partial = partial(wrap_getSPGraph, Gn, edge_weight) + result_sp = pool.map(getsp_partial, range(0, len(Gn))) + for i in result_sp: + Gn[i[0]] = i[1] + + # Gn = [ + # getSPGraph(G, edge_weight=edge_weight) + # for G in tqdm(Gn, desc='getting sp graphs', file=sys.stdout) + # ] Kmatrix = np.zeros((len(Gn), len(Gn))) - pbar = tqdm( - total=((len(Gn) + 1) * len(Gn) / 2), - desc='calculating kernels', - file=sys.stdout) + + do_partial = partial(spkernel_do, Gn, ds_attrs, node_label, node_kernels) + itr = combinations_with_replacement(range(0, len(Gn)), 2) + # chunksize = 2000 # int(len(list(itr)) / n_jobs) + # for i, j, kernel in tqdm(pool.imap_unordered(do_partial, itr, chunksize)): + # Kmatrix[i][j] = kernel + # Kmatrix[j][i] = kernel + + result_perf = pool.map(do_partial, itr) + pool.close() + pool.join() + + # result_perf = Parallel( + # n_jobs=n_jobs, verbose=10)( + # delayed(do_partial)(ij) + # for ij in combinations_with_replacement(range(0, len(Gn)), 2)) + + # result_perf = [ + # do_partial(ij) + # for ij in combinations_with_replacement(range(0, len(Gn)), 2) + # ] + + for i in result_perf: + Kmatrix[i[0]][i[1]] = i[2] + Kmatrix[i[1]][i[0]] = i[2] + + # pbar = tqdm( + # total=((len(Gn) + 1) * len(Gn) / 2), + # desc='calculating kernels', + # file=sys.stdout) + # if ds_attrs['node_labeled']: + # # node symb and non-synb labeled + # if ds_attrs['node_attr_dim'] > 0: + # if ds_attrs['is_directed']: + # for i, j in combinations_with_replacement( + # range(0, len(Gn)), 2): + # for e1, e2 in product( + # Gn[i].edges(data=True), Gn[j].edges(data=True)): + # if e1[2]['cost'] == e2[2]['cost']: + # kn = node_kernels['mix'] + # try: + # n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + # i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + # j].nodes[e2[1]] + # kn1 = kn(n11[node_label], n21[node_label], [ + # n11['attributes'] + # ], [n21['attributes']]) * kn( + # n12[node_label], n22[node_label], + # [n12['attributes']], [n22['attributes']]) + # Kmatrix[i][j] += kn1 + # except KeyError: # missing labels or attributes + # pass + # Kmatrix[j][i] = Kmatrix[i][j] + # pbar.update(1) + + # else: + # for i, j in combinations_with_replacement( + # range(0, len(Gn)), 2): + # for e1, e2 in product( + # Gn[i].edges(data=True), Gn[j].edges(data=True)): + # if e1[2]['cost'] == e2[2]['cost']: + # kn = node_kernels['mix'] + # try: + # # each edge walk is counted twice, starting from both its extreme nodes. + # n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + # i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + # j].nodes[e2[1]] + # kn1 = kn(n11[node_label], n21[node_label], [ + # n11['attributes'] + # ], [n21['attributes']]) * kn( + # n12[node_label], n22[node_label], + # [n12['attributes']], [n22['attributes']]) + # kn2 = kn(n11[node_label], n22[node_label], [ + # n11['attributes'] + # ], [n22['attributes']]) * kn( + # n12[node_label], n21[node_label], + # [n12['attributes']], [n21['attributes']]) + # Kmatrix[i][j] += kn1 + kn2 + # except KeyError: # missing labels or attributes + # pass + # Kmatrix[j][i] = Kmatrix[i][j] + # pbar.update(1) + # # node symb labeled + # else: + # if ds_attrs['is_directed']: + # for i, j in combinations_with_replacement( + # range(0, len(Gn)), 2): + # for e1, e2 in product( + # Gn[i].edges(data=True), Gn[j].edges(data=True)): + # if e1[2]['cost'] == e2[2]['cost']: + # kn = node_kernels['symb'] + # try: + # n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + # i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + # j].nodes[e2[1]] + # kn1 = kn(n11[node_label], + # n21[node_label]) * kn( + # n12[node_label], n22[node_label]) + # Kmatrix[i][j] += kn1 + # except KeyError: # missing labels + # pass + # Kmatrix[j][i] = Kmatrix[i][j] + # pbar.update(1) + + # else: + # for i, j in combinations_with_replacement( + # range(0, len(Gn)), 2): + # for e1, e2 in product( + # Gn[i].edges(data=True), Gn[j].edges(data=True)): + # if e1[2]['cost'] == e2[2]['cost']: + # kn = node_kernels['symb'] + # try: + # # each edge walk is counted twice, starting from both its extreme nodes. + # n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + # i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + # j].nodes[e2[1]] + # kn1 = kn(n11[node_label], + # n21[node_label]) * kn( + # n12[node_label], n22[node_label]) + # kn2 = kn(n11[node_label], + # n22[node_label]) * kn( + # n12[node_label], n21[node_label]) + # Kmatrix[i][j] += kn1 + kn2 + # except KeyError: # missing labels + # pass + # Kmatrix[j][i] = Kmatrix[i][j] + # pbar.update(1) + # else: + # # node non-synb labeled + # if ds_attrs['node_attr_dim'] > 0: + # if ds_attrs['is_directed']: + # for i, j in combinations_with_replacement( + # range(0, len(Gn)), 2): + # for e1, e2 in product( + # Gn[i].edges(data=True), Gn[j].edges(data=True)): + # if e1[2]['cost'] == e2[2]['cost']: + # kn = node_kernels['nsymb'] + # try: + # # each edge walk is counted twice, starting from both its extreme nodes. + # n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + # i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + # j].nodes[e2[1]] + # kn1 = kn([n11['attributes']], + # [n21['attributes']]) * kn( + # [n12['attributes']], + # [n22['attributes']]) + # Kmatrix[i][j] += kn1 + # except KeyError: # missing attributes + # pass + # Kmatrix[j][i] = Kmatrix[i][j] + # pbar.update(1) + # else: + # for i, j in combinations_with_replacement( + # range(0, len(Gn)), 2): + # for e1, e2 in product( + # Gn[i].edges(data=True), Gn[j].edges(data=True)): + # if e1[2]['cost'] == e2[2]['cost']: + # kn = node_kernels['nsymb'] + # try: + # # each edge walk is counted twice, starting from both its extreme nodes. + # n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + # i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + # j].nodes[e2[1]] + # kn1 = kn([n11['attributes']], + # [n21['attributes']]) * kn( + # [n12['attributes']], + # [n22['attributes']]) + # kn2 = kn([n11['attributes']], + # [n22['attributes']]) * kn( + # [n12['attributes']], + # [n21['attributes']]) + # Kmatrix[i][j] += kn1 + kn2 + # except KeyError: # missing attributes + # pass + # Kmatrix[j][i] = Kmatrix[i][j] + # pbar.update(1) + + # # node unlabeled + # else: + # for i, j in combinations_with_replacement(range(0, len(Gn)), 2): + # for e1, e2 in product( + # Gn[i].edges(data=True), Gn[j].edges(data=True)): + # if e1[2]['cost'] == e2[2]['cost']: + # Kmatrix[i][j] += 1 + # Kmatrix[j][i] = Kmatrix[i][j] + # pbar.update(1) + + run_time = time.time() - start_time + print( + "\n --- shortest path kernel matrix of size %d built in %s seconds ---" + % (len(Gn), run_time)) + + return Kmatrix, run_time, idx + + +def spkernel_do(Gn, ds_attrs, node_label, node_kernels, ij): + + i = ij[0] + j = ij[1] + Kmatrix = 0 if ds_attrs['node_labeled']: # node symb and non-synb labeled if ds_attrs['node_attr_dim'] > 0: if ds_attrs['is_directed']: - for i, j in combinations_with_replacement( - range(0, len(Gn)), 2): - for e1, e2 in product( - Gn[i].edges(data=True), Gn[j].edges(data=True)): - if e1[2]['cost'] == e2[2]['cost']: - kn = node_kernels['mix'] - try: - n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ - i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ - j].nodes[e2[1]] - kn1 = kn(n11[node_label], n21[node_label], [ - n11['attributes'] - ], [n21['attributes']]) * kn( + for e1, e2 in product( + Gn[i].edges(data=True), Gn[j].edges(data=True)): + if e1[2]['cost'] == e2[2]['cost']: + kn = node_kernels['mix'] + try: + n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + j].nodes[e2[1]] + kn1 = kn( + n11[node_label], n21[node_label], + [n11['attributes']], [n21['attributes']]) * kn( n12[node_label], n22[node_label], [n12['attributes']], [n22['attributes']]) - Kmatrix[i][j] += kn1 - except KeyError: # missing labels or attributes - pass - Kmatrix[j][i] = Kmatrix[i][j] - pbar.update(1) - + Kmatrix += kn1 + except KeyError: # missing labels or attributes + pass else: - for i, j in combinations_with_replacement( - range(0, len(Gn)), 2): - for e1, e2 in product( - Gn[i].edges(data=True), Gn[j].edges(data=True)): - if e1[2]['cost'] == e2[2]['cost']: - kn = node_kernels['mix'] - try: - # each edge walk is counted twice, starting from both its extreme nodes. - n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ - i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ - j].nodes[e2[1]] - kn1 = kn(n11[node_label], n21[node_label], [ - n11['attributes'] - ], [n21['attributes']]) * kn( + for e1, e2 in product( + Gn[i].edges(data=True), Gn[j].edges(data=True)): + if e1[2]['cost'] == e2[2]['cost']: + kn = node_kernels['mix'] + try: + # each edge walk is counted twice, starting from both its extreme nodes. + n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + j].nodes[e2[1]] + kn1 = kn( + n11[node_label], n21[node_label], + [n11['attributes']], [n21['attributes']]) * kn( n12[node_label], n22[node_label], [n12['attributes']], [n22['attributes']]) - kn2 = kn(n11[node_label], n22[node_label], [ - n11['attributes'] - ], [n22['attributes']]) * kn( + kn2 = kn( + n11[node_label], n22[node_label], + [n11['attributes']], [n22['attributes']]) * kn( n12[node_label], n21[node_label], [n12['attributes']], [n21['attributes']]) - Kmatrix[i][j] += kn1 + kn2 - except KeyError: # missing labels or attributes - pass - Kmatrix[j][i] = Kmatrix[i][j] - pbar.update(1) + Kmatrix += kn1 + kn2 + except KeyError: # missing labels or attributes + pass # node symb labeled else: if ds_attrs['is_directed']: - for i, j in combinations_with_replacement( - range(0, len(Gn)), 2): - for e1, e2 in product( - Gn[i].edges(data=True), Gn[j].edges(data=True)): - if e1[2]['cost'] == e2[2]['cost']: - kn = node_kernels['symb'] - try: - n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ - i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ - j].nodes[e2[1]] - kn1 = kn(n11[node_label], - n21[node_label]) * kn( - n12[node_label], n22[node_label]) - Kmatrix[i][j] += kn1 - except KeyError: # missing labels - pass - Kmatrix[j][i] = Kmatrix[i][j] - pbar.update(1) - + for e1, e2 in product( + Gn[i].edges(data=True), Gn[j].edges(data=True)): + if e1[2]['cost'] == e2[2]['cost']: + kn = node_kernels['symb'] + try: + n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + j].nodes[e2[1]] + kn1 = kn(n11[node_label], n21[node_label]) * kn( + n12[node_label], n22[node_label]) + Kmatrix += kn1 + except KeyError: # missing labels + pass else: - for i, j in combinations_with_replacement( - range(0, len(Gn)), 2): - for e1, e2 in product( - Gn[i].edges(data=True), Gn[j].edges(data=True)): - if e1[2]['cost'] == e2[2]['cost']: - kn = node_kernels['symb'] - try: - # each edge walk is counted twice, starting from both its extreme nodes. - n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ - i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ - j].nodes[e2[1]] - kn1 = kn(n11[node_label], - n21[node_label]) * kn( - n12[node_label], n22[node_label]) - kn2 = kn(n11[node_label], - n22[node_label]) * kn( - n12[node_label], n21[node_label]) - Kmatrix[i][j] += kn1 + kn2 - except KeyError: # missing labels - pass - Kmatrix[j][i] = Kmatrix[i][j] - pbar.update(1) + for e1, e2 in product( + Gn[i].edges(data=True), Gn[j].edges(data=True)): + if e1[2]['cost'] == e2[2]['cost']: + kn = node_kernels['symb'] + try: + # each edge walk is counted twice, starting from both its extreme nodes. + n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + j].nodes[e2[1]] + kn1 = kn(n11[node_label], n21[node_label]) * kn( + n12[node_label], n22[node_label]) + kn2 = kn(n11[node_label], n22[node_label]) * kn( + n12[node_label], n21[node_label]) + Kmatrix += kn1 + kn2 + except KeyError: # missing labels + pass else: # node non-synb labeled if ds_attrs['node_attr_dim'] > 0: if ds_attrs['is_directed']: - for i, j in combinations_with_replacement( - range(0, len(Gn)), 2): - for e1, e2 in product( - Gn[i].edges(data=True), Gn[j].edges(data=True)): - if e1[2]['cost'] == e2[2]['cost']: - kn = node_kernels['nsymb'] - try: - # each edge walk is counted twice, starting from both its extreme nodes. - n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ - i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ - j].nodes[e2[1]] - kn1 = kn([n11['attributes']], - [n21['attributes']]) * kn( - [n12['attributes']], - [n22['attributes']]) - Kmatrix[i][j] += kn1 - except KeyError: # missing attributes - pass - Kmatrix[j][i] = Kmatrix[i][j] - pbar.update(1) + for e1, e2 in product( + Gn[i].edges(data=True), Gn[j].edges(data=True)): + if e1[2]['cost'] == e2[2]['cost']: + kn = node_kernels['nsymb'] + try: + # each edge walk is counted twice, starting from both its extreme nodes. + n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + j].nodes[e2[1]] + kn1 = kn( + [n11['attributes']], [n21['attributes']]) * kn( + [n12['attributes']], [n22['attributes']]) + Kmatrix += kn1 + except KeyError: # missing attributes + pass else: - for i, j in combinations_with_replacement( - range(0, len(Gn)), 2): - for e1, e2 in product( - Gn[i].edges(data=True), Gn[j].edges(data=True)): - if e1[2]['cost'] == e2[2]['cost']: - kn = node_kernels['nsymb'] - try: - # each edge walk is counted twice, starting from both its extreme nodes. - n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ - i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ - j].nodes[e2[1]] - kn1 = kn([n11['attributes']], - [n21['attributes']]) * kn( - [n12['attributes']], - [n22['attributes']]) - kn2 = kn([n11['attributes']], - [n22['attributes']]) * kn( - [n12['attributes']], - [n21['attributes']]) - Kmatrix[i][j] += kn1 + kn2 - except KeyError: # missing attributes - pass - Kmatrix[j][i] = Kmatrix[i][j] - pbar.update(1) - - # node unlabeled - else: - for i, j in combinations_with_replacement(range(0, len(Gn)), 2): for e1, e2 in product( Gn[i].edges(data=True), Gn[j].edges(data=True)): if e1[2]['cost'] == e2[2]['cost']: - Kmatrix[i][j] += 1 - Kmatrix[j][i] = Kmatrix[i][j] - pbar.update(1) + kn = node_kernels['nsymb'] + try: + # each edge walk is counted twice, starting from both its extreme nodes. + n11, n12, n21, n22 = Gn[i].nodes[e1[0]], Gn[ + i].nodes[e1[1]], Gn[j].nodes[e2[0]], Gn[ + j].nodes[e2[1]] + kn1 = kn( + [n11['attributes']], [n21['attributes']]) * kn( + [n12['attributes']], [n22['attributes']]) + kn2 = kn( + [n11['attributes']], [n22['attributes']]) * kn( + [n12['attributes']], [n21['attributes']]) + Kmatrix += kn1 + kn2 + except KeyError: # missing attributes + pass + # node unlabeled + else: + for e1, e2 in product( + Gn[i].edges(data=True), Gn[j].edges(data=True)): + if e1[2]['cost'] == e2[2]['cost']: + Kmatrix += 1 - run_time = time.time() - start_time - print( - "\n --- shortest path kernel matrix of size %d built in %s seconds ---" - % (len(Gn), run_time)) + return i, j, Kmatrix - return Kmatrix, run_time, idx + +def wrap_getSPGraph(Gn, weight, i): + return i, getSPGraph(Gn[i], edge_weight=weight) \ No newline at end of file diff --git a/pygraph/utils/model_selection_precomputed.py b/pygraph/utils/model_selection_precomputed.py index 68b2d7c..9522e80 100644 --- a/pygraph/utils/model_selection_precomputed.py +++ b/pygraph/utils/model_selection_precomputed.py @@ -1,11 +1,32 @@ +import numpy as np +from matplotlib import pyplot as plt +from sklearn.kernel_ridge import KernelRidge +from sklearn.svm import SVC +from sklearn.metrics import accuracy_score, mean_squared_error +from sklearn.model_selection import KFold, train_test_split, ParameterGrid +from joblib import Parallel, delayed +from multiprocessing import Pool +from functools import partial +import sys +sys.path.insert(0, "../") +import os +import time +from os.path import basename, splitext +from pygraph.utils.graphfiles import loadDataset +from tqdm import tqdm -def model_selection_for_precomputed_kernel(datafile, estimator, - param_grid_precomputed, param_grid, - model_type, NUM_TRIALS=30, + +def model_selection_for_precomputed_kernel(datafile, + estimator, + param_grid_precomputed, + param_grid, + model_type, + NUM_TRIALS=30, datafile_y=None, extra_params=None, - ds_name='ds-unknown'): + ds_name='ds-unknown', + n_jobs=1): """Perform model selection, fitting and testing for precomputed kernels using nested cv. Print out neccessary data during the process then finally the results. Parameters @@ -40,94 +61,101 @@ def model_selection_for_precomputed_kernel(datafile, estimator, >>> >>> model_selection_for_precomputed_kernel(datafile, estimator, param_grid_precomputed, param_grid, 'regression') """ - import numpy as np - from matplotlib import pyplot as plt - from sklearn.kernel_ridge import KernelRidge - from sklearn.svm import SVC - from sklearn.metrics import accuracy_score, mean_squared_error - from sklearn.model_selection import KFold, train_test_split, ParameterGrid - - import sys - sys.path.insert(0, "../") - import os - from os.path import basename, splitext - from pygraph.utils.graphfiles import loadDataset - from tqdm import tqdm tqdm.monitor_interval = 0 results_dir = '../notebooks/results/' + estimator.__name__ - if not os.path.exists(results_dir): - os.makedirs(results_dir) - - # open file to save all results for this dataset. - with open(results_dir + '/' + ds_name + '.txt', 'w') as fresults: - fresults.write('# This file contains results of ' + estimator.__name__ + ' on dataset ' + ds_name + ',\n# including gram matrices, serial numbers for gram matrix figures and performance.\n\n') - - # setup the model type - model_type = model_type.lower() - if model_type != 'regression' and model_type != 'classification': - raise Exception( - 'The model type is incorrect! Please choose from regression or classification.') - print() - print('--- This is a %s problem ---' % model_type) - fresults.write('This is a %s problem.\n\n' % model_type) + # a string to save all the results. + str_fw = '# This file contains results of ' + estimator.__name__ + ' on dataset ' + ds_name + ',\n# including gram matrices, serial numbers for gram matrix figures and performance.\n\n' - # Load the dataset - print() - print('\nI. Loading dataset from file...') - dataset, y = loadDataset(datafile, filename_y=datafile_y, extra_params=extra_params) + # setup the model type + model_type = model_type.lower() + if model_type != 'regression' and model_type != 'classification': + raise Exception( + 'The model type is incorrect! Please choose from regression or classification.' + ) + print() + print('--- This is a %s problem ---' % model_type) + str_fw += 'This is a %s problem.\n\n' % model_type + + # Load the dataset + print() + print('\nI. Loading dataset from file...') + dataset, y = loadDataset( + datafile, filename_y=datafile_y, extra_params=extra_params) - # import matplotlib.pyplot as plt + # import matplotlib.pyplot as plt # import networkx as nx # nx.draw_networkx(dataset[30]) # plt.show() - # Grid of parameters with a discrete number of values for each. - param_list_precomputed = list(ParameterGrid(param_grid_precomputed)) - param_list = list(ParameterGrid(param_grid)) - # np.savetxt(results_name_pre + 'param_grid_precomputed.dt', - # [[key, value] for key, value in sorted(param_grid_precomputed)]) - # np.savetxt(results_name_pre + 'param_grid.dt', - # [[key, value] for key, value in sorted(param_grid)]) + # Grid of parameters with a discrete number of values for each. + param_list_precomputed = list(ParameterGrid(param_grid_precomputed)) + param_list = list(ParameterGrid(param_grid)) + # np.savetxt(results_name_pre + 'param_grid_precomputed.dt', + # [[key, value] for key, value in sorted(param_grid_precomputed)]) + # np.savetxt(results_name_pre + 'param_grid.dt', + # [[key, value] for key, value in sorted(param_grid)]) - gram_matrices = [] # a list to store gram matrices for all param_grid_precomputed - gram_matrix_time = [] # a list to store time to calculate gram matrices - param_list_pre_revised = [] # list to store param grids precomputed ignoring the useless ones + gram_matrices = [ + ] # a list to store gram matrices for all param_grid_precomputed + gram_matrix_time = [ + ] # a list to store time to calculate gram matrices + param_list_pre_revised = [ + ] # list to store param grids precomputed ignoring the useless ones + + # calculate all gram matrices + print() + print('2. Calculating gram matrices. This could take a while...') + str_fw += '\nI. Gram matrices.\n\n' + tts = time.time() # start training time + nb_gm_ignore = 0 # the number of gram matrices those should not be considered, as they may contain elements that are not numbers (NaN) + for idx, params_out in enumerate(param_list_precomputed): + params_out['n_jobs'] = n_jobs + rtn_data = estimator(dataset, **params_out) + Kmatrix = rtn_data[0] + current_run_time = rtn_data[1] + if len(rtn_data) == 3: + idx_trim = rtn_data[2] # the index of trimmed graph list + y = [y[idx] for idx in idx_trim] + + Kmatrix_diag = Kmatrix.diagonal().copy() + # remove graphs whose kernels with themselves are zeros + nb_g_ignore = 0 + for idx, diag in enumerate(Kmatrix_diag): + if diag == 0: + Kmatrix = np.delete(Kmatrix, (idx - nb_g_ignore), axis=0) + Kmatrix = np.delete(Kmatrix, (idx - nb_g_ignore), axis=1) + nb_g_ignore += 1 + # normalization + for i in range(len(Kmatrix)): + for j in range(i, len(Kmatrix)): + Kmatrix[i][j] /= np.sqrt(Kmatrix_diag[i] * Kmatrix_diag[j]) + Kmatrix[j][i] = Kmatrix[i][j] - # calculate all gram matrices print() - print('2. Calculating gram matrices. This could take a while...') - fresults.write('\nI. Gram matrices.\n\n') - nb_gm_ignore = 0 # the number of gram matrices those should not be considered, as they may contain elements that are not numbers (NaN) - for idx, params_out in enumerate(param_list_precomputed): - rtn_data = estimator(dataset, **params_out) - Kmatrix = rtn_data[0] - current_run_time = rtn_data[1] - if len(rtn_data) == 3: - idx_trim = rtn_data[2] # the index of trimmed graph list - y = [y[idx] for idx in idx_trim] - - Kmatrix_diag = Kmatrix.diagonal().copy() - for i in range(len(Kmatrix)): - for j in range(i, len(Kmatrix)): - # if Kmatrix_diag[i] != 0 and Kmatrix_diag[j] != 0: - Kmatrix[i][j] /= np.sqrt(Kmatrix_diag[i] * Kmatrix_diag[j]) - Kmatrix[j][i] = Kmatrix[i][j] - - print() - if params_out == {}: - print('the gram matrix is: ') - fresults.write('the gram matrix is:\n\n') - else: - print('the gram matrix with parameters', params_out, 'is: ') - fresults.write('the gram matrix with parameters %s is:\n\n' % params_out) - if np.isnan(Kmatrix).any(): # if the matrix contains elements that are not numbers + if params_out == {}: + print('the gram matrix is: ') + str_fw += 'the gram matrix is:\n\n' + else: + print('the gram matrix with parameters', params_out, 'is: ') + str_fw += 'the gram matrix with parameters %s is:\n\n' % params_out + if len(Kmatrix) < 2: + nb_gm_ignore += 1 + print('ignored, as at most only one of all its diagonal value is non-zero.') + str_fw += 'ignored, as at most only one of all its diagonal value is non-zero.\n\n' + else: + if np.isnan(Kmatrix).any( + ): # if the matrix contains elements that are not numbers nb_gm_ignore += 1 print('ignored, as it contains elements that are not numbers.') - fresults.write('ignored, as it contains elements that are not numbers.\n\n') + str_fw += 'ignored, as it contains elements that are not numbers.\n\n' else: print(Kmatrix) - fresults.write(np.array2string(Kmatrix, separator=',', threshold=np.inf, floatmode='unique') + '\n\n') + str_fw += np.array2string( + Kmatrix, + separator=',', + threshold=np.inf, + floatmode='unique') + '\n\n' plt.matshow(Kmatrix) plt.colorbar() fig_file_name = results_dir + '/GM[ds]' + ds_name @@ -138,115 +166,52 @@ def model_selection_for_precomputed_kernel(datafile, estimator, gram_matrices.append(Kmatrix) gram_matrix_time.append(current_run_time) param_list_pre_revised.append(params_out) - print() - print('{} gram matrices are calculated, {} of which are ignored.'.format(len(param_list_precomputed), nb_gm_ignore)) - fresults.write('{} gram matrices are calculated, {} of which are ignored.\n\n'.format(len(param_list_precomputed), nb_gm_ignore)) - fresults.write('serial numbers of gram matrix figure and their corresponding parameters settings:\n\n') - fresults.write(''.join(['{}: {}\n'.format(idx, params_out) - for idx, params_out in enumerate(param_list_precomputed)])) + if nb_g_ignore > 0: + print(', where %d graphs are ignored as their graph kernels with themselves are zeros.' % nb_g_ignore) + str_fw += ', where %d graphs are ignored as their graph kernels with themselves are zeros.' % nb_g_ignore + print() + print( + '{} gram matrices are calculated, {} of which are ignored.'.format( + len(param_list_precomputed), nb_gm_ignore)) + str_fw += '{} gram matrices are calculated, {} of which are ignored.\n\n'.format(len(param_list_precomputed), nb_gm_ignore) + str_fw += 'serial numbers of gram matrix figures and their corresponding parameters settings:\n\n' + str_fw += ''.join([ + '{}: {}\n'.format(idx, params_out) + for idx, params_out in enumerate(param_list_precomputed) + ]) - print() - print('3. Fitting and predicting using nested cross validation. This could really take a while...') - # Arrays to store scores - train_pref = np.zeros( - (NUM_TRIALS, len(param_list_pre_revised), len(param_list))) - val_pref = np.zeros( - (NUM_TRIALS, len(param_list_pre_revised), len(param_list))) - test_pref = np.zeros( - (NUM_TRIALS, len(param_list_pre_revised), len(param_list))) - - # Loop for each trial - pbar = tqdm(total=NUM_TRIALS * len(param_list_pre_revised) * len(param_list), - desc='calculate performance', file=sys.stdout) - for trial in range(NUM_TRIALS): # Test set level - # loop for each outer param tuple - for index_out, params_out in enumerate(param_list_pre_revised): - # split gram matrix and y to app and test sets. - X_app, X_test, y_app, y_test = train_test_split( - gram_matrices[index_out], y, test_size=0.1) - split_index_app = [y.index(y_i) for y_i in y_app if y_i in y] - # split_index_test = [y.index(y_i) for y_i in y_test if y_i in y] - X_app = X_app[:, split_index_app] - X_test = X_test[:, split_index_app] - y_app = np.array(y_app) - y_test = np.array(y_test) - - # loop for each inner param tuple - for index_in, params_in in enumerate(param_list): - inner_cv = KFold(n_splits=10, shuffle=True, random_state=trial) - current_train_perf = [] - current_valid_perf = [] - current_test_perf = [] - - # For regression use the Kernel Ridge method - try: - if model_type == 'regression': - KR = KernelRidge(kernel='precomputed', **params_in) - # loop for each split on validation set level - # validation set level - for train_index, valid_index in inner_cv.split(X_app): - KR.fit(X_app[train_index, :] - [:, train_index], y_app[train_index]) - - # predict on the train, validation and test set - y_pred_train = KR.predict( - X_app[train_index, :][:, train_index]) - y_pred_valid = KR.predict( - X_app[valid_index, :][:, train_index]) - y_pred_test = KR.predict(X_test[:, train_index]) - - # root mean squared errors - current_train_perf.append( - np.sqrt(mean_squared_error(y_app[train_index], y_pred_train))) - current_valid_perf.append( - np.sqrt(mean_squared_error(y_app[valid_index], y_pred_valid))) - current_test_perf.append( - np.sqrt(mean_squared_error(y_test, y_pred_test))) - # For clcassification use SVM - else: - KR = SVC(kernel='precomputed', **params_in) - # loop for each split on validation set level - # validation set level - for train_index, valid_index in inner_cv.split(X_app): - KR.fit(X_app[train_index, :] - [:, train_index], y_app[train_index]) - - # predict on the train, validation and test set - y_pred_train = KR.predict( - X_app[train_index, :][:, train_index]) - y_pred_valid = KR.predict( - X_app[valid_index, :][:, train_index]) - y_pred_test = KR.predict( - X_test[:, train_index]) - - # root mean squared errors - current_train_perf.append(accuracy_score( - y_app[train_index], y_pred_train)) - current_valid_perf.append(accuracy_score( - y_app[valid_index], y_pred_valid)) - current_test_perf.append( - accuracy_score(y_test, y_pred_test)) - except ValueError: - print(sys.exc_info()[0]) - print(params_out, params_in) - - # average performance on inner splits - train_pref[trial][index_out][index_in] = np.mean( - current_train_perf) - val_pref[trial][index_out][index_in] = np.mean( - current_valid_perf) - test_pref[trial][index_out][index_in] = np.mean( - current_test_perf) - - pbar.update(1) - pbar.clear() + print() + if len(gram_matrices) == 0: + print('all gram matrices are ignored, no results obtained.') + str_fw += '\nall gram matrices are ignored, no results obtained.\n\n' + else: + print( + '3. Fitting and predicting using nested cross validation. This could really take a while...' + ) + pool = Pool(n_jobs) + trial_do_partial = partial(trial_do, param_list_pre_revised, param_list, gram_matrices, y, model_type) + result_perf = pool.map(trial_do_partial, range(NUM_TRIALS)) + train_pref = [item[0] for item in result_perf] + val_pref = [item[1] for item in result_perf] + test_pref = [item[2] for item in result_perf] + pool.close() + pool.join() + + # trial_do_partial = partial(trial_do, param_list_pre_revised, param_list, gram_matrices, y, model_type) + # result_perf = Parallel(n_jobs=n_jobs, verbose=10)(delayed(trial_do_partial)(trial) for trial in range(NUM_TRIALS)) + # train_pref = [item[0] for item in result_perf] + # val_pref = [item[1] for item in result_perf] + # test_pref = [item[2] for item in result_perf] + + + # pbar.clear() # np.save(results_name_pre + 'train_pref.dt', train_pref) # np.save(results_name_pre + 'val_pref.dt', val_pref) # np.save(results_name_pre + 'test_pref.dt', test_pref) print() print('4. Getting final performance...') - fresults.write('\nII. Performance.\n\n') + str_fw += '\nII. Performance.\n\n' # averages and confidences of performances on outer trials for each combination of parameters average_train_scores = np.mean(train_pref, axis=0) average_val_scores = np.mean(val_pref, axis=0) @@ -255,53 +220,78 @@ def model_selection_for_precomputed_kernel(datafile, estimator, std_train_scores = np.std(train_pref, axis=0, ddof=1) std_val_scores = np.std(val_pref, axis=0, ddof=1) std_perf_scores = np.std(test_pref, axis=0, ddof=1) - + if model_type == 'regression': best_val_perf = np.amin(average_val_scores) else: best_val_perf = np.amax(average_val_scores) best_params_index = np.where(average_val_scores == best_val_perf) # find smallest val std with best val perf. - best_val_stds = [std_val_scores[value][best_params_index[1][idx]] for idx, value in enumerate(best_params_index[0])] + best_val_stds = [ + std_val_scores[value][best_params_index[1][idx]] + for idx, value in enumerate(best_params_index[0]) + ] min_val_std = np.amin(best_val_stds) best_params_index = np.where(std_val_scores == min_val_std) - best_params_out = [param_list_pre_revised[i] for i in best_params_index[0]] + best_params_out = [ + param_list_pre_revised[i] for i in best_params_index[0] + ] best_params_in = [param_list[i] for i in best_params_index[1]] print('best_params_out: ', best_params_out) print('best_params_in: ', best_params_in) print() print('best_val_perf: ', best_val_perf) print('best_val_std: ', min_val_std) - fresults.write('best settings of hyper-params to build gram matrix: %s\n' % best_params_out) - fresults.write('best settings of other hyper-params: %s\n\n' % best_params_in) - fresults.write('best_val_perf: %s\n' % best_val_perf) - fresults.write('best_val_std: %s\n' % min_val_std) + str_fw += 'best settings of hyper-params to build gram matrix: %s\n' % best_params_out + str_fw += 'best settings of other hyper-params: %s\n\n' % best_params_in + str_fw += 'best_val_perf: %s\n' % best_val_perf + str_fw += 'best_val_std: %s\n' % min_val_std - final_performance = [average_perf_scores[value][best_params_index[1][idx]] for idx, value in enumerate(best_params_index[0])] - final_confidence = [std_perf_scores[value][best_params_index[1][idx]] for idx, value in enumerate(best_params_index[0])] + final_performance = [ + average_perf_scores[value][best_params_index[1][idx]] + for idx, value in enumerate(best_params_index[0]) + ] + final_confidence = [ + std_perf_scores[value][best_params_index[1][idx]] + for idx, value in enumerate(best_params_index[0]) + ] print('final_performance: ', final_performance) print('final_confidence: ', final_confidence) - fresults.write('final_performance: %s\n' % final_performance) - fresults.write('final_confidence: %s\n' % final_confidence) - train_performance = [average_train_scores[value][best_params_index[1][idx]] for idx, value in enumerate(best_params_index[0])] - train_std = [std_train_scores[value][best_params_index[1][idx]] for idx, value in enumerate(best_params_index[0])] + str_fw += 'final_performance: %s\n' % final_performance + str_fw += 'final_confidence: %s\n' % final_confidence + train_performance = [ + average_train_scores[value][best_params_index[1][idx]] + for idx, value in enumerate(best_params_index[0]) + ] + train_std = [ + std_train_scores[value][best_params_index[1][idx]] + for idx, value in enumerate(best_params_index[0]) + ] print('train_performance: %s' % train_performance) print('train_std: ', train_std) - fresults.write('train_performance: %s\n' % train_performance) - fresults.write('train_std: %s\n\n' % train_std) + str_fw += 'train_performance: %s\n' % train_performance + str_fw += 'train_std: %s\n\n' % train_std print() + tt_total = time.time() - tts # training time for all hyper-parameters average_gram_matrix_time = np.mean(gram_matrix_time) std_gram_matrix_time = np.std(gram_matrix_time, ddof=1) - best_gram_matrix_time = [gram_matrix_time[i] for i in best_params_index[0]] + best_gram_matrix_time = [ + gram_matrix_time[i] for i in best_params_index[0] + ] ave_bgmt = np.mean(best_gram_matrix_time) std_bgmt = np.std(best_gram_matrix_time, ddof=1) - print('time to calculate gram matrix with different hyper-params: {:.2f}±{:.2f}s' - .format(average_gram_matrix_time, std_gram_matrix_time)) - print('time to calculate best gram matrix: {:.2f}±{:.2f}s'.format(ave_bgmt, std_bgmt)) - fresults.write('time to calculate gram matrix with different hyper-params: {:.2f}±{:.2f}s\n' - .format(average_gram_matrix_time, std_gram_matrix_time)) - fresults.write('time to calculate best gram matrix: {:.2f}±{:.2f}s\n\n'.format(ave_bgmt, std_bgmt)) + print( + 'time to calculate gram matrix with different hyper-params: {:.2f}±{:.2f}s' + .format(average_gram_matrix_time, std_gram_matrix_time)) + print('time to calculate best gram matrix: {:.2f}±{:.2f}s'.format( + ave_bgmt, std_bgmt)) + print( + 'total training time with all hyper-param choices: {:.2f}s'.format( + tt_total)) + str_fw += 'time to calculate gram matrix with different hyper-params: {:.2f}±{:.2f}s\n'.format(average_gram_matrix_time, std_gram_matrix_time) + str_fw += 'time to calculate best gram matrix: {:.2f}±{:.2f}s\n'.format(ave_bgmt, std_bgmt) + str_fw += 'total training time with all hyper-param choices: {:.2f}s\n\n'.format(tt_total) # # save results to file # np.savetxt(results_name_pre + 'average_train_scores.dt', @@ -312,7 +302,7 @@ def model_selection_for_precomputed_kernel(datafile, estimator, # np.savetxt(results_name_pre + 'std_train_scores.dt', std_train_scores) # np.savetxt(results_name_pre + 'std_val_scores.dt', std_val_scores) # np.savetxt(results_name_pre + 'std_perf_scores.dt', std_perf_scores) - + # np.save(results_name_pre + 'best_params_index', best_params_index) # np.save(results_name_pre + 'best_params_pre.dt', best_params_out) # np.save(results_name_pre + 'best_params_in.dt', best_params_in) @@ -322,7 +312,7 @@ def model_selection_for_precomputed_kernel(datafile, estimator, # np.save(results_name_pre + 'final_confidence.dt', final_confidence) # np.save(results_name_pre + 'train_performance.dt', train_performance) # np.save(results_name_pre + 'train_std.dt', train_std) - + # np.save(results_name_pre + 'gram_matrix_time.dt', gram_matrix_time) # np.save(results_name_pre + 'average_gram_matrix_time.dt', # average_gram_matrix_time) @@ -330,7 +320,7 @@ def model_selection_for_precomputed_kernel(datafile, estimator, # std_gram_matrix_time) # np.save(results_name_pre + 'best_gram_matrix_time.dt', # best_gram_matrix_time) - + # print out as table. from collections import OrderedDict from tabulate import tabulate @@ -343,20 +333,150 @@ def model_selection_for_precomputed_kernel(datafile, estimator, param_in['C'] = '{:.2e}'.format(param_in['C']) table_dict['params'] = [{**param_out, **param_in} for param_in in param_list for param_out in param_list_pre_revised] - table_dict['gram_matrix_time'] = ['{:.2f}'.format(gram_matrix_time[index_out]) - for param_in in param_list for index_out, _ in enumerate(param_list_pre_revised)] - table_dict['valid_perf'] = ['{:.2f}±{:.2f}'.format(average_val_scores[index_out][index_in], std_val_scores[index_out][index_in]) - for index_in, _ in enumerate(param_list) for index_out, _ in enumerate(param_list_pre_revised)] - table_dict['test_perf'] = ['{:.2f}±{:.2f}'.format(average_perf_scores[index_out][index_in], std_perf_scores[index_out][index_in]) - for index_in, _ in enumerate(param_list) for index_out, _ in enumerate(param_list_pre_revised)] - table_dict['train_perf'] = ['{:.2f}±{:.2f}'.format(average_train_scores[index_out][index_in], std_train_scores[index_out][index_in]) - for index_in, _ in enumerate(param_list) for index_out, _ in enumerate(param_list_pre_revised)] - keyorder = ['params', 'train_perf', 'valid_perf', - 'test_perf', 'gram_matrix_time'] + table_dict['gram_matrix_time'] = [ + '{:.2f}'.format(gram_matrix_time[index_out]) + for param_in in param_list + for index_out, _ in enumerate(param_list_pre_revised) + ] + table_dict['valid_perf'] = [ + '{:.2f}±{:.2f}'.format(average_val_scores[index_out][index_in], + std_val_scores[index_out][index_in]) + for index_in, _ in enumerate(param_list) + for index_out, _ in enumerate(param_list_pre_revised) + ] + table_dict['test_perf'] = [ + '{:.2f}±{:.2f}'.format(average_perf_scores[index_out][index_in], + std_perf_scores[index_out][index_in]) + for index_in, _ in enumerate(param_list) + for index_out, _ in enumerate(param_list_pre_revised) + ] + table_dict['train_perf'] = [ + '{:.2f}±{:.2f}'.format(average_train_scores[index_out][index_in], + std_train_scores[index_out][index_in]) + for index_in, _ in enumerate(param_list) + for index_out, _ in enumerate(param_list_pre_revised) + ] + keyorder = [ + 'params', 'train_perf', 'valid_perf', 'test_perf', + 'gram_matrix_time' + ] print() - tb_print = tabulate(OrderedDict(sorted(table_dict.items(), - key=lambda i: keyorder.index(i[0]))), headers='keys') + tb_print = tabulate( + OrderedDict( + sorted(table_dict.items(), + key=lambda i: keyorder.index(i[0]))), + headers='keys') print(tb_print) - fresults.write('table of performance v.s. hyper-params:\n\n%s\n\n' % tb_print) + str_fw += 'table of performance v.s. hyper-params:\n\n%s\n\n' % tb_print + + # open file to save all results for this dataset. + if not os.path.exists(results_dir): + os.makedirs(results_dir) + + with open(results_dir + '/' + ds_name + '.txt', 'w') as fresults: + fresults.write(str_fw) + fresults.close() + + +def trial_do(param_list_pre_revised, param_list, gram_matrices, y, model_type, trial): # Test set level + + # Arrays to store scores + train_pref = np.zeros((len(param_list_pre_revised), + len(param_list))) + val_pref = np.zeros((len(param_list_pre_revised), + len(param_list))) + test_pref = np.zeros((len(param_list_pre_revised), + len(param_list))) + + # loop for each outer param tuple + for index_out, params_out in enumerate(param_list_pre_revised): + # split gram matrix and y to app and test sets. + X_app, X_test, y_app, y_test = train_test_split( + gram_matrices[index_out], y, test_size=0.1) + split_index_app = [y.index(y_i) for y_i in y_app if y_i in y] + # split_index_test = [y.index(y_i) for y_i in y_test if y_i in y] + X_app = X_app[:, split_index_app] + X_test = X_test[:, split_index_app] + y_app = np.array(y_app) + y_test = np.array(y_test) + + # loop for each inner param tuple + for index_in, params_in in enumerate(param_list): + inner_cv = KFold( + n_splits=10, shuffle=True, random_state=trial) + current_train_perf = [] + current_valid_perf = [] + current_test_perf = [] + + # For regression use the Kernel Ridge method + try: + if model_type == 'regression': + KR = KernelRidge(kernel='precomputed', **params_in) + # loop for each split on validation set level + # validation set level + for train_index, valid_index in inner_cv.split( + X_app): + KR.fit(X_app[train_index, :][:, train_index], + y_app[train_index]) + + # predict on the train, validation and test set + y_pred_train = KR.predict( + X_app[train_index, :][:, train_index]) + y_pred_valid = KR.predict( + X_app[valid_index, :][:, train_index]) + y_pred_test = KR.predict( + X_test[:, train_index]) + + # root mean squared errors + current_train_perf.append( + np.sqrt( + mean_squared_error( + y_app[train_index], y_pred_train))) + current_valid_perf.append( + np.sqrt( + mean_squared_error( + y_app[valid_index], y_pred_valid))) + current_test_perf.append( + np.sqrt( + mean_squared_error( + y_test, y_pred_test))) + # For clcassification use SVM + else: + KR = SVC(kernel='precomputed', **params_in) + # loop for each split on validation set level + # validation set level + for train_index, valid_index in inner_cv.split( + X_app): + KR.fit(X_app[train_index, :][:, train_index], + y_app[train_index]) + + # predict on the train, validation and test set + y_pred_train = KR.predict( + X_app[train_index, :][:, train_index]) + y_pred_valid = KR.predict( + X_app[valid_index, :][:, train_index]) + y_pred_test = KR.predict( + X_test[:, train_index]) + + # root mean squared errors + current_train_perf.append( + accuracy_score(y_app[train_index], + y_pred_train)) + current_valid_perf.append( + accuracy_score(y_app[valid_index], + y_pred_valid)) + current_test_perf.append( + accuracy_score(y_test, y_pred_test)) + except ValueError: + print(sys.exc_info()[0]) + print(params_out, params_in) + + # average performance on inner splits + train_pref[index_out][index_in] = np.mean( + current_train_perf) + val_pref[index_out][index_in] = np.mean( + current_valid_perf) + test_pref[index_out][index_in] = np.mean( + current_test_perf) - fresults.close() + return train_pref, val_pref, test_pref \ No newline at end of file diff --git a/pygraph/utils/utils.py b/pygraph/utils/utils.py index 563ed36..277c747 100644 --- a/pygraph/utils/utils.py +++ b/pygraph/utils/utils.py @@ -61,10 +61,11 @@ def floydTransformation(G, edge_weight=None): spMatrix = nx.floyd_warshall_numpy(G, weight=edge_weight) S = nx.Graph() S.add_nodes_from(G.nodes(data=True)) + ns = list(G.nodes()) for i in range(0, G.number_of_nodes()): for j in range(i + 1, G.number_of_nodes()): if spMatrix[i, j] != np.inf: - S.add_edge(i, j, cost=spMatrix[i, j]) + S.add_edge(ns[i], ns[j], cost=spMatrix[i, j]) return S