{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "ENZYMES\n", "\n", "--- This is a classification 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", "getting sp graphs: 100%|██████████| 600/600 [00:01<00:00, 387.62it/s]\n", "calculating kernels: 0%| | 116/180300.0 [00:36<13:08:20, 3.81it/s]" ] }, { "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 59\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 60\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---> 61\u001b[0;31m ds_name=ds['name'])\n\u001b[0m\u001b[1;32m 62\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 101\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 102\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--> 103\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 104\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 105\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, *args)\u001b[0m\n\u001b[1;32m 93\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\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;34m\u001b[0m\u001b[0m\n\u001b[1;32m 94\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0me1\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mGn\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0medges\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 95\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0me2\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mGn\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0medges\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\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 96\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0me1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'cost'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0me2\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'cost'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 97\u001b[0m \u001b[0mkn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnode_kernels\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'mix'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "%load_ext line_profiler\n", "%matplotlib inline\n", "import functools\n", "from libs import *\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", "\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", "for ds in dslist:\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", " print()" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\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", "\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": [ "\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]" ] }, { "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" ] }, { "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]" ] } ], "source": [ "%load_ext line_profiler\n", "%matplotlib inline\n", "import numpy as np\n", "import sys\n", "sys.path.insert(0, \"../\")\n", "from pygraph.utils.model_selection_precomputed import model_selection_for_precomputed_kernel\n", "from pygraph.kernels.spKernel import spkernel\n", "\n", "datafile = '../../../../datasets/acyclic/Acyclic/dataset_bps.ds'\n", "estimator = spkernel\n", "param_grid_precomputed = {}\n", "param_grid = {'alpha': np.logspace(-1, 1, num = 41, base = 10)}\n", "\n", "model_selection_for_precomputed_kernel(datafile, estimator, param_grid_precomputed, param_grid, \n", " 'regression', NUM_TRIALS=30)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " --- This is a regression problem ---\n", "\n", "\n", " Loading dataset from file...\n", "\n", " Calculating kernel matrix, this could take a while...\n", "--- shortest path kernel matrix of size 185 built in 13.3865065574646 seconds ---\n", "[[ 3. 1. 3. ... 1. 1. 1.]\n", " [ 1. 6. 1. ... 0. 0. 3.]\n", " [ 3. 1. 3. ... 1. 1. 1.]\n", " ...\n", " [ 1. 0. 1. ... 55. 21. 7.]\n", " [ 1. 0. 1. ... 21. 55. 7.]\n", " [ 1. 3. 1. ... 7. 7. 55.]]\n", "\n", " Starting calculate accuracy/rmse...\n", "calculate performance: 94%|█████████▎| 936/1000 [00:01<00:00, 757.54it/s]\n", " Mean performance on train set: 28.360361\n", "With standard deviation: 1.357183\n", "\n", " Mean performance on test set: 35.191954\n", "With standard deviation: 4.495767\n", "calculate performance: 100%|██████████| 1000/1000 [00:01<00:00, 771.22it/s]\n", "\n", "\n", " rmse_test std_test rmse_train std_train k_time\n", "----------- ---------- ------------ ----------- --------\n", " 35.192 4.49577 28.3604 1.35718 13.3865\n" ] } ], "source": [ "%load_ext line_profiler\n", "\n", "import sys\n", "sys.path.insert(0, \"../\")\n", "from pygraph.utils.utils import kernel_train_test\n", "from pygraph.kernels.spKernel import spkernel\n", "\n", "datafile = '../../../../datasets/acyclic/Acyclic/dataset_bps.ds'\n", "kernel_file_path = 'kernelmatrices_path_acyclic/'\n", "\n", "kernel_para = dict(edge_weight = 'atom')\n", "\n", "kernel_train_test(datafile, kernel_file_path, spkernel, kernel_para, normalize = False)\n", "\n", "# %lprun -f spkernel \\\n", "# kernel_train_test(datafile, kernel_file_path, spkernel, kernel_para, normalize = False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# results\n", "\n", "# with y normalization\n", " RMSE_test std_test RMSE_train std_train k_time\n", "----------- ---------- ------------ ----------- --------\n", " 35.6337 5.23183 32.3805 3.92531 14.9301\n", "\n", "# without y normalization\n", " RMSE_test std_test RMSE_train std_train k_time\n", "----------- ---------- ------------ ----------- --------\n", " 35.192 4.49577 28.3604 1.35718 14.5768" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "- This script take as input a kernel matrix\n", "and returns the classification or regression performance\n", "- The kernel matrix can be calculated using any of the graph kernels approaches\n", "- The criteria used for prediction are SVM for classification and kernel Ridge regression for regression\n", "- For predition we divide the data in training, validation and test. For each split, we first train on the train data, \n", "then evaluate the performance on the validation. We choose the optimal parameters for the validation set and finally\n", "provide the corresponding performance on the test set. If more than one split is performed, the final results \n", "correspond to the average of the performances on the test sets. \n", "\n", "@references\n", " https://github.com/eghisu/GraphKernels/blob/master/GraphKernelsCollection/python_scripts/compute_perf_gk.py\n", "\n", "\n", " Loading dataset from file...\n", "[ -23.7 14. 37.3 109.7 10.8 39. 42. 66.6 135. 148.5\n", " 40. 34.6 32. 63. 53.5 67. 64.4 84.7 95.5 92.\n", " 84.4 154. 156. 166. 183. 70.3 63.6 52.5 59. 59.5\n", " 55.2 88. 83. 104.5 102. 92. 107.4 123.2 112.5 118.5\n", " 101.5 173.7 165.5 181. 99.5 92.3 90.1 80.2 82. 91.2\n", " 91.5 81.2 93. 69. 86.3 82. 103. 103.5 96. 112. 104.\n", " 132.5 123.5 120.3 145. 144.2 142.8 132. 134.2 137. 139.\n", " 133.6 120.4 120. 137. 195.8 177.2 181. 185.9 175.7 186. 211.\n", " 125. 118. 117.1 107. 102.5 112. 97.4 91.5 87.6 106.5\n", " 101. 99.3 90. 137. 114. 126. 124. 140.5 157.5 146. 145.\n", " 141. 171. 166. 155. 145. 159. 138. 142. 159. 163.5\n", " 229.5 142. 125. 132. 130.5 125. 122. 121. 122.2 112. 106.\n", " 114.5 151. 128.5 109.5 126. 147. 158. 147. 165. 188.9\n", " 170. 178. 148.5 165. 177. 167. 195. 226. 215. 201. 205.\n", " 151.5 165.5 157. 139. 163. 153.5 139. 162. 173. 159.5\n", " 159.5 155.5 141. 126. 164. 163. 166.5 146. 165. 159. 195.\n", " 218. 250. 235. 186.5 156.5 162. 162. 170.2 173.2 186.8\n", " 173. 187. 174. 188.5 199. 228. 215. 216. 240. ]\n", "\n", " Loading the matrix from file...\n", "[[ 3. 1. 3. ..., 1. 1. 1.]\n", " [ 1. 6. 1. ..., 0. 0. 3.]\n", " [ 3. 1. 3. ..., 1. 1. 1.]\n", " ..., \n", " [ 1. 0. 1. ..., 55. 21. 7.]\n", " [ 1. 0. 1. ..., 21. 55. 7.]\n", " [ 1. 3. 1. ..., 7. 7. 55.]]\n", "\n", " --- This is a regression problem ---\n", "\n", " Starting split 10...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 12 with parameter alpha = 100.000000\n", "The best performance on the validation set is: 40.422382\n", "The corresponding performance on test set is: 47.424532\n", "\n", " Starting split 11...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 12 with parameter alpha = 100.000000\n", "The best performance on the validation set is: 33.084913\n", "The corresponding performance on test set is: 35.493699\n", "\n", " Starting split 12...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 12 with parameter alpha = 100.000000\n", "The best performance on the validation set is: 31.306710\n", "The corresponding performance on test set is: 33.173366\n", "\n", " Starting split 13...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 12 with parameter alpha = 100.000000\n", "The best performance on the validation set is: 43.500424\n", "The corresponding performance on test set is: 32.633129\n", "\n", " Starting split 14...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 10 with parameter alpha = 1.000000\n", "The best performance on the validation set is: 53.561752\n", "The corresponding performance on test set is: 42.883548\n", "\n", " Starting split 15...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 12 with parameter alpha = 100.000000\n", "The best performance on the validation set is: 40.444773\n", "The corresponding performance on test set is: 32.713040\n", "\n", " Starting split 16...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 11 with parameter alpha = 10.000000\n", "The best performance on the validation set is: 37.046818\n", "The corresponding performance on test set is: 37.337851\n", "\n", " Starting split 17...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 12 with parameter alpha = 100.000000\n", "The best performance on the validation set is: 39.907628\n", "The corresponding performance on test set is: 38.889064\n", "\n", " Starting split 18...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 12 with parameter alpha = 100.000000\n", "The best performance on the validation set is: 29.879950\n", "The corresponding performance on test set is: 27.652558\n", "\n", " Starting split 19...\n", "\n", " Normalizing output y...\n", "The best performance is for trial 11 with parameter alpha = 10.000000\n", "The best performance on the validation set is: 44.911892\n", "The corresponding performance on test set is: 35.804454\n", "\n", " Mean performance on val set: 39.406724\n", "With standard deviation: 6.720820\n", "\n", " Mean performance on test set: 36.400524\n", "With standard deviation: 5.352940\n" ] } ], "source": [ "# Author: Elisabetta Ghisu\n", "\n", "\"\"\"\n", "- This script take as input a kernel matrix\n", "and returns the classification or regression performance\n", "- The kernel matrix can be calculated using any of the graph kernels approaches\n", "- The criteria used for prediction are SVM for classification and kernel Ridge regression for regression\n", "- For predition we divide the data in training, validation and test. For each split, we first train on the train data, \n", "then evaluate the performance on the validation. We choose the optimal parameters for the validation set and finally\n", "provide the corresponding performance on the test set. If more than one split is performed, the final results \n", "correspond to the average of the performances on the test sets. \n", "\n", "@references\n", " https://github.com/eghisu/GraphKernels/blob/master/GraphKernelsCollection/python_scripts/compute_perf_gk.py\n", "\"\"\"\n", "\n", "print(__doc__)\n", "\n", "import sys\n", "import pathlib\n", "sys.path.insert(0, \"../\")\n", "from tabulate import tabulate\n", "\n", "import random\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from sklearn.kernel_ridge import KernelRidge # 0.17\n", "from sklearn.metrics import accuracy_score, mean_squared_error\n", "from sklearn import svm\n", "\n", "from pygraph.kernels.spkernel import spkernel\n", "from pygraph.utils.graphfiles import loadDataset\n", "\n", "print('\\n Loading dataset from file...')\n", "dataset, y = loadDataset(\"../../../../datasets/acyclic/Acyclic/dataset_bps.ds\")\n", "y = np.array(y)\n", "print(y)\n", "\n", "kernel_file_path = 'kernelmatrix.ds'\n", "path = pathlib.Path(kernel_file_path)\n", "if path.is_file():\n", " print('\\n Loading the matrix from file...')\n", " Kmatrix = np.loadtxt(kernel_file_path)\n", " print(Kmatrix)\n", "else:\n", " print('\\n Calculating kernel matrix, this could take a while...')\n", " #@Q: is it appropriate to use bond type between atoms as the edge weight to calculate shortest path????????\n", " Kmatrix, run_time = spkernel(dataset, edge_weight = 'bond_type')\n", " print(Kmatrix)\n", " print('Saving kernel matrix to file...')\n", " np.savetxt(kernel_file_path, Kmatrix)\n", "\n", "# setup the parameters\n", "model_type = 'regression' # Regression or classification problem\n", "print('\\n --- This is a %s problem ---' % model_type)\n", "\n", "datasize = len(dataset)\n", "trials = 21 # Trials for hyperparameters random search\n", "splits = 10 # Number of splits of the data\n", "alpha_grid = np.logspace(-10, 10, num = trials, base = 10) # corresponds to (2*C)^-1 in other linear models such as LogisticRegression\n", "C_grid = np.logspace(-10, 10, num = trials, base = 10)\n", "random.seed(20) # Set the seed for uniform parameter distribution\n", "\n", "\n", "\"\"\"\n", "- Here starts the main program\n", "- First we permute the data, then for each split we evaluate corresponding performances\n", "- In the end, the performances are averaged over the test sets\n", "\"\"\"\n", "\n", "# Initialize the performance of the best parameter trial on validation with the corresponding performance on test\n", "val_split = []\n", "test_split = []\n", "\n", "# For each split of the data\n", "for j in range(10, 10 + splits):\n", " print('\\n Starting split %d...' % j)\n", "\n", " # Set the random set for data permutation\n", " random_state = int(j)\n", " np.random.seed(random_state)\n", " idx_perm = np.random.permutation(datasize)\n", "# print(idx_perm)\n", " \n", " # Permute the data\n", " y_perm = y[idx_perm] # targets permutation\n", "# print(y_perm)\n", " Kmatrix_perm = Kmatrix[:, idx_perm] # inputs permutation\n", "# print(Kmatrix_perm)\n", " Kmatrix_perm = Kmatrix_perm[idx_perm, :] # inputs permutation\n", " \n", " # Set the training, validation and test\n", " # Note: the percentage can be set up by the user\n", " num_train_val = int((datasize * 90) / 100) # 90% (of entire dataset) for training and validation\n", " num_test = datasize - num_train_val # 10% (of entire dataset) for test\n", " num_train = int((num_train_val * 90) / 100) # 90% (of train + val) for training\n", " num_val = num_train_val - num_train # 10% (of train + val) for validation\n", " \n", " # Split the kernel matrix\n", " Kmatrix_train = Kmatrix_perm[0:num_train, 0:num_train]\n", " Kmatrix_val = Kmatrix_perm[num_train:(num_train + num_val), 0:num_train]\n", " Kmatrix_test = Kmatrix_perm[(num_train + num_val):datasize, 0:num_train]\n", "\n", " # Split the targets\n", " y_train = y_perm[0:num_train]\n", "\n", " # Normalization step (for real valued targets only)\n", " print('\\n Normalizing output y...')\n", " if model_type == 'regression':\n", " y_train_mean = np.mean(y_train)\n", " y_train_std = np.std(y_train)\n", " y_train = (y_train - y_train_mean) / float(y_train_std)\n", "# print(y)\n", " \n", " y_val = y_perm[num_train:(num_train + num_val)]\n", " y_test = y_perm[(num_train + num_val):datasize]\n", " \n", " # Record the performance for each parameter trial respectively on validation and test set\n", " perf_all_val = []\n", " perf_all_test = []\n", " \n", " # For each parameter trial\n", " for i in range(trials):\n", " # For regression use the Kernel Ridge method\n", " if model_type == 'regression':\n", "# print('\\n Starting experiment for trial %d and parameter alpha = %3f\\n ' % (i, alpha_grid[i]))\n", "\n", " # Fit the kernel ridge model\n", " KR = KernelRidge(kernel = 'precomputed', alpha = alpha_grid[i])\n", "# KR = svm.SVR(kernel = 'precomputed', C = C_grid[i])\n", " KR.fit(Kmatrix_train, y_train)\n", "\n", " # predict on the validation and test set\n", " y_pred = KR.predict(Kmatrix_val)\n", " y_pred_test = KR.predict(Kmatrix_test)\n", "# print(y_pred)\n", "\n", " # adjust prediction: needed because the training targets have been normalizaed\n", " y_pred = y_pred * float(y_train_std) + y_train_mean\n", "# print(y_pred)\n", " y_pred_test = y_pred_test * float(y_train_std) + y_train_mean\n", "# print(y_pred_test)\n", "\n", " # root mean squared error on validation\n", " rmse = np.sqrt(mean_squared_error(y_val, y_pred))\n", " perf_all_val.append(rmse)\n", "\n", " # root mean squared error in test \n", " rmse_test = np.sqrt(mean_squared_error(y_test, y_pred_test))\n", " perf_all_test.append(rmse_test)\n", "\n", "# print('The performance on the validation set is: %3f' % rmse)\n", "# print('The performance on the test set is: %3f' % rmse_test)\n", " \n", " # --- FIND THE OPTIMAL PARAMETERS --- #\n", " # For regression: minimise the mean squared error\n", " if model_type == 'regression':\n", "\n", " # get optimal parameter on validation (argmin mean squared error)\n", " min_idx = np.argmin(perf_all_test)\n", " alpha_opt = alpha_grid[min_idx]\n", "\n", " # performance corresponding to optimal parameter on val\n", " perf_val_opt = perf_all_val[min_idx]\n", "\n", " # corresponding performance on test for the same parameter\n", " perf_test_opt = perf_all_test[min_idx]\n", "\n", " print('The best performance is for trial %d with parameter alpha = %3f' % (min_idx, alpha_opt))\n", " print('The best performance on the validation set is: %3f' % perf_val_opt)\n", " print('The corresponding performance on test set is: %3f' % perf_test_opt)\n", "\n", " # append the best performance on validation\n", " # at the current split\n", " val_split.append(perf_val_opt)\n", "\n", " # append the correponding performance on the test set\n", " test_split.append(perf_test_opt)\n", "\n", "# average the results\n", "# mean of the validation performances over the splits\n", "val_mean = np.mean(np.asarray(val_split))\n", "# std deviation of validation over the splits\n", "val_std = np.std(np.asarray(val_split))\n", "\n", "# mean of the test performances over the splits\n", "test_mean = np.mean(np.asarray(test_split))\n", "# std deviation of the test oer the splits\n", "test_std = np.std(np.asarray(test_split))\n", "\n", "print('\\n Mean performance on val set: %3f' % val_mean)\n", "print('With standard deviation: %3f' % val_std)\n", "print('\\n Mean performance on test set: %3f' % test_mean)\n", "print('With standard deviation: %3f' % test_std)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }