{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Signed Cumulative Distribution Transform Nearest Local Subspace (SCDT-NLS) Classifier\n", "\n", "This tutorial will demonstrate how to use the SCDT-NLS classifier from the *PyTransKit* package to classify 1D signals." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Class:: SCDT_NLS\n", "**Functions**:\n", "\n", "1. Constructor function:\n", " scdt_nls_obj = SCDT_NLS(num_classes, rm_edge)\n", " \n", " Inputs:\n", " ----------------\n", " num_classes : integer value\n", " totale number of classes in the dataset.\n", " rm_edge : [optional] boolean \n", " IF TRUE the first and last points of CDTs will be removed.\n", " \n", " Outputs:\n", " ----------------\n", " scdt_nls_obj : class object\n", " Instance of the class SCDT_NLS.\n", " \n", "2. Fit function:\n", " scdt_nls_obj.fit(Xtrain, Ytrain, Ttrain)\n", " \n", " Inputs:\n", " ----------------\n", " Xtrain : array-like, shape (n_samples, n_columns)\n", " 1D data for training.\n", " Ytrain : ndarray of shape (n_samples,)\n", " Labels of the training samples.\n", " Ttrain : [optional] array-like, shape (n_samples, n_columns)\n", " domain for corresponding training signals.\n", " \n", "3. Predict function:\n", " preds = scdt_nls_obj.predict(Xtest, Ttest, k, N)\n", " \n", " Inputs:\n", " ----------------\n", " Xtest : array-like, shape (n_samples, n_columns)\n", " 1D data for testing.\n", " Ttest : [optional] array-like, shape (n_samples, n_columns)\n", " domain for corresponding test signals.\n", " k : [Optional] pre-tuned parameter \n", " number of closest points to test sample\n", " N : [Optional] pre-tuned parameter \n", " number of sinusoidal bases used for subspace enrrichment\n", " \n", " Outputs:\n", " ----------------\n", " preds : 1d array, shape (n_samples,)\n", " Predicted labels for test samples.\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example\n", "The following example will demonstrate how to:\n", "* create and initialize an instance of the class SCDT_NLS\n", "* train the model using 1D signals\n", "* apply the model to predict calss labels of the test 1D samples
\n", "\n", "In this example we have used a synthetic dataset (1D). The dataset contains three classes, each containing data generated from two templates." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import python libraries" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from numpy import interp\n", "import math\n", "import matplotlib.pyplot as plt\n", "from scipy.linalg import lstsq\n", "from scipy import signal\n", "import random\n", "\n", "import sys\n", "sys.path.append('../')\n", "from pytranskit.classification.utils import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import SCDT-NLS class from PyTransKit package" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from pytranskit.classification.scdt_nls import SCDT_NLS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define a six template signals (three classes each with two templates)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def signal_gabor_phi1(t):\n", " w = 25\n", " s1 = np.real(math.pi**-0.25 * np.exp(2*math.pi*1j*w*(t-0.5)) * np.exp(-250*((t-0.5)**2)))\n", " return s1\n", "\n", "def signal_gabor_phi2(t):\n", " w = 25\n", " s1 = (np.real(math.pi**-0.25 * np.exp(2*math.pi*1j*w*(t-0.35)) * np.exp(-250*((t-0.35)**2)))\n", " +0.25*np.real(math.pi**-0.25 * np.exp(2*math.pi*1j*w*(t-0.7)) * np.exp(-250*((t-0.7)**2))) )\n", " return s1\n", "\n", "def signal_sawtooth_phi1(t):\n", " s2 = signal.sawtooth(2 * np.pi * 15 * (t-0.5))* np.exp(-250*((t-0.5)**2))\n", " return s2\n", "\n", "def signal_sawtooth_phi2(t):\n", " s2 = (signal.sawtooth(2 * np.pi * 15 * (t-0.35))* np.exp(-250*((t-0.35)**2))\n", " +0.25*signal.sawtooth(2 * np.pi * 15 * (t-0.7))* np.exp(-250*((t-0.7)**2)) )\n", " return s2\n", "\n", "def signal_square_phi1(t):\n", " s3 = signal.square(2 * np.pi * 15 * (t-0.5))*np.exp(-250*((t-0.5)**2))\n", " return s3\n", "\n", "def signal_square_phi2(t):\n", " s3 = (signal.square(2 * np.pi * 15 * (t-0.35))*np.exp(-250*((t-0.35)**2)) \n", " + 0.2*signal.square(2 * np.pi * 15 * (t-0.70))*np.exp(-250*((t-0.70)**2)))\n", " return s3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate template signals for three classes" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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9rzm3nac0bkOAADGISfgvppMJnXOOedo9+7dI3xFQPEjNAVy0NHTm9N+AAAQ056N7m0nPTrXAQDAOJROB99Xt2zZoi996UsjeDXA2EBoCuQgqKKUSlMAAIbIU2lKaAoAQKGEhaaS9OMf/1hPPfXUCF0NMDYQmgI5oNIUAIBhYoemoj0fAIBCsdvzL774Yi1cuND1+CWXXDLSlwUUNUJTIAeBM00D9gMAgBiSnVJHq3sflaYAABSMXWlaW1ur73//+659t99+ux5//PGRvCygqBGaAjkIrDTtptIUAIC87dnk3cdCUAAAFIwdmhpjdPLJJ+voo4927b/88stH8rKAokZoCuQgcKYplaYAAORvzwbvPkJTAAAKxm7PLysrkzFGX/va11z7b7rpJq1bt24ErwwoXoSmQA6YaQoAwDDwzDMV7fkAABSQXWlaVpaJg44//ngtXrzYddyVV145otcGFCtCUyAHgZWmAfsBAEAMhKYAAAyroNDUGKPPfOYzrsd++ctfKplMjti1AcWK0BTIAZWmAAAMA0JTAACGld9M037nnnuumpqaBra3b9+uO++8c8SuDShWhKZADoJml1JpCgDAEOzZ6LOTmaYAABSK30zTfjU1NXrve9/revzaa68dkesCihmhKZCDjm4qTQEAKDgqTQEAGFZB7fn9zj//fNf2rbfeqh07dgz7dQHFjNAUyEFgpWnAfgAAECGdlvZs8u4nNAUAoGDC2vMl6eijj9bChQsHtpPJpG644YYRuTagWBGaAjkInGkaUIEKAAAitG+XUt3e/Q7t+QAAFEpYe76UCVHtalNa9FHqCE2BHATNLu1IppRO8+YOAICc+bXmS1SaAgBQQFHt+ZJ03nnnuSpQV65cqdWrVw/7tQHFitAUyEFQpanjSF29tOgDAJAz30WgRKUpAAAFFCc0nT17to477jjXvt///vfDeVlAUSM0BXIQVGka9RgAAAhApSkAAMMuaqZpv3POOce1TWiKUkZoCuQgqNJUkjpZDAoAgNwFhaai0hQAgEKJmmna76yzznI99vTTT2vNmjXDem1AsSI0BXLQHhKMtocEqgAAIEBgez6VpgAAFEqc9nxJmjJlio499ljXvqeffnrYrgsoZoSmQA46uoOD0bAqVAAAEID2fAAAhl3c9nxJmjZtmmu7t5f3uihNhKZATOm0o44kM00BACgo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cswxx+ib3/ym5zy2yZMnu0LT7du3xw5No0LHYptpmss8VilT6Tp58mRt2rRpYN+9996rb3/723r00UdDn3vQQQdp5cqVqq+v9zyWTCa1d+9edXZ2qqurS62trdq8efPA92SM8f3T3oexY7hn0NKejxHhONKrre16tbVdtz29OfC4N86eoFnNtbo165gH17Tq8bU7deS8zBuhFza738gsmpYdmla5HnOFplaAWZPVnu9ZCMo61g52s4NST3t+SKVpZVZ7fk1Ie769CFR2aLrICk2z/z4cx9HVD611PX7Qfg06dEaT/vDka6799728Xfe9HG+VQgBFbtobRvsKUExOv1JadIb0+vOZld7btkrtrVJvVyYkrKiRmmZITbOk2UdL89+emXcaRy6rz9ut8y37B1do9vMsBBXyJi3X1n8pOvRdcbn0+nPufSd8XXrLp6PPLWWu/12XSsd9MXPumgnxngegKFVWVuod73jHaF8GikRbW5va29s1derUWMHa5MmT9fLLg/fCsLmduYaOw92eP9wzTSV5QtMzzzwz8NgJEybo5JNP1jvf+U6dc845voFp/+tmj0bYf3+f+exADghNUTT+8ajZ+spph6iyvEzb27r1yKuDc0t+dP/fdeS8IyV5KysPnjY4z7PFqjRt3ZcVmlrt+bWu9nx7pml4e352yGovBNUTOtM0q9K00mrPz7q+HfvcN83s72v/KfVKlJmB9v1Nuzu1pzOpppoKrVjTqjXb9g0cmygzuvqDSzV9Qo3ePL9FX/rjs57vBQAwziTKpQNPzvwzHOfOFrby++tWh1Fka768laZhw1xa17i3Jx0Qff6whaz2vCb99b/djx/6HumYT0Wf11bl/2YOADB2NTQ0qKHBuwBvEHtu57Zt2wKPzTV0tEPP/lXfg8LQobbn5zrTNG5oGsYYozPPPFMXXnihjjvuuFjnBAptxELT2sqEpjZWBT5uQtqSoj7ECW3My7O0OuxpoY9FtFeFPzfseSF/P6EvmN/r5fuaxmQCyP7Zl+3dvXp9b7deb+sKHEs2tbFKXz51kU5/w+Dw7ItPOECP/OSRge0HVm/Xxp0dmj6hRi9vdbfnL5o22Erobc/PmmlqtefXZrfnVwS32Et+7fkm62u70nTwG7XPk/062eMBJHclbFilaXVFQvtPrtfLrw/+Pby0Za+Omt+in1tVpicfup+m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NIIWeupnjFFlwvu8hVMbCnZtAACMa8w0BQBgSFpaWvSd73wn9BhCUyAeflIAS3VFQicsmurZH9WeL0mdyZRn3zELWgpyXQAAjHtUmgIAMGTnnXeeTjvttMDHCU2BePhJAXy8+40zPPui2vP9LJ3brAqf6lMAAOCjt9u7r977QSYAAAhmjNF1112ngw8+OPBxANFIcwAfbztgsibVVw1sT6qvVHNtdGh6xuHTXdv/fuqigl8bAADjVuMMqaJucLt5nkQ1DAAAOWtqatK9996rJUuWeB5bsGDBKFwRMPbwf6GAj4pEmf77fYdrYl2lGqrL9aVTDlZ5jIrRC49boPmT61RdUabPHL9Qb5g1YQSuFgCAcaKiWjrha1JZuVQ7STrt+6N9RQAAjFnTp0/XihUr9I1vfEMzZ2bG3Zx//vl685vfPMpXBowNxnGc2AcvWbLEeeKJJ4bxcoDi4jiOelJpVZUnYj+nN5WWpFghKzDeGGOedBzH+3E2QnF/BSzptOSkpUT0PHH8f/buOzyqMn0f+D09yaQ3CKF3kCLNFXQVC0qzgehiW3FRQVfXhru6a1nX79r3Z1kVV1zLYsOGHRFQRIoQULqQUEIgCeltJlPP+f1xyGROmUqSSbk/15WLnDqHZDLlnud5X+oK+PwaPT7HEjXzeDwwGvncSuQv2HMs/1qIgtDpdBEFpgDDUiIiopOm14MNUURERC2LgSlRZPhqlIiIiIiIiIiIiMgPQ1MiIiIiIiIiIiIiPwxNiYiIiIiIiIiIiPwwNCUiIiIiIiIiIiLyw9CUiIiIiIiIiIiIyI9OFMXwd9bpygEUtt7lEBFRB9dHFMWsWF9ER8PnVyIiCoHPr1HicywREYUQ8Dk2otCUiIiIiIiIiIiIqLNjez4RERERERERERGRH4amRERERERERERERH4YmhIRERERERERERH5YWhKRERERERERERE5IehKREREREREREREZEfhqZEREREREREREREfhiaEhEREREREREREflhaEpERERERERERETkh6EpERERERERERERkR+GpkRERERERERERER+GJoSERERERERERER+WFoSkREREREREREROSHoSkRERERERERERGRH4amRERERERERERERH4YmhIRERERERERERH5YWhKRERERERERERE5IehKREREREREREREZEfhqZEREREREREREREfhiaEhEREREREREREflhaEpERERERERERETkh6EpERERERERERERkR+GpkRERERERERERER+GJoSERERERERERER+WFoSkREREREREREROSHoSkRERERERERERGRH4amRERERERERERERH4YmhIRERERERERERH5YWhKRERERERERERE5IehKREREREREREREZEfhqZEREREREREREREfhiaEhEREREREREREflhaEpERERERERERETkh6EpERERERERERERkR+GpkRERERERERERER+GJoSERERERERERER+WFoSkREREREREREROSHoSkRERERERERERGRH4amRERERERERERERH6MkeycmZkp9u3bt5UuhYiIOrqtW7dWiKKYFevr6Gj4/EpERMHw+TV6fI4lIqJggj3HRhSa9u3bF3l5eS1zVURE1OnodLrCWF9DR8TnVyIiCobPr9HjcywREQUT7DmW7flEREREREREREREfhiaEhEREREREREREflhaEpERERERERERETkh6EpERERERERERERkR+GptTqjlTasXJ3KWrt7lhfChERUefg9QD53wIlO2J9JURERJ2OzWbDl19+ia1bt0IUxVhfDhHFiDHWF0Cd25bDVfjdfzbBK4jonZ6AFXf8Fglm3u2IiIiiJorA0lnAobUAdMClLwOnzo31VREREXUKTqcTY8eOxf79+wEAw4YNw+LFi3HWWWfF+MqIqK2x0pRa1d3LtsMrSJ/MHamyY11+RYyviIiIqIM7svFEYAoAIrD6kZheDhERUWeydu1aX2AKAHv37sW5556LV155JYZXRUSxwNCUWo3d5cGRKrts3faimhhdDRERUSdx6Af5cn1xbK6DiIioE6qurlat83q9WLhwIZYvXx6DKyKiWGFoSq1Gq6o0Od4UgyshIiLqROqOxfoKiIiIOi1BEDTXi6KIa665BocOHWrjKyKiWGFoSq1m9d7jqnU2pycGV0JERNSJ1DI0JSIiai2BQlO9Xo9bbrkF3bp1a+MrIqJY4Yw81Gp+PqJuxa93MDQlIiI6Kaw0JSIiajWiKKrWjR49Gq+99hrGjRsXgysiolhhaEqtRisgbWClKRER0cnReDNHRERELUNZaXrNNdfgv//9L0wmDjVH1NWwPZ9ajd2lEZqy0pSIiOjkXLlUvpyUE5vrICIi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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N = 300 # number of discrete samples per signal\n", "\n", "## Define a set of signals\n", "t = np.linspace(0.,1.,N)\n", "\n", "s_template = []\n", "\n", "s_template.append(signal_gabor_phi1(t))\n", "s_template.append(signal_gabor_phi2(t))\n", "\n", "s_template.append(signal_sawtooth_phi1(t))\n", "s_template.append(signal_sawtooth_phi2(t))\n", "\n", "s_template.append(signal_square_phi1(t))\n", "s_template.append(signal_square_phi2(t))\n", "\n", "num_classes = len(s_template)//2\n", "\n", "## Plotting\n", "lw = 4.0\n", "fig, ax = plt.subplots(2, 3, sharex=False, sharey=False, figsize=(24,2*4))\n", "\n", "ax[0,0].plot(t,s_template[0],'tab:blue',lw=lw)\n", "ax[0,0].set_title(\"Class: 1\",fontsize=20)\n", "ax[0,0].set_yticks([])\n", "ax[0,0].set_xticks([])\n", "\n", "ax[0,1].plot(t,s_template[2],'tab:orange',lw=lw)\n", "ax[0,1].set_title(\"Class: 2\",fontsize=20)\n", "ax[0,1].set_yticks([])\n", "ax[0,1].set_xticks([])\n", "\n", "ax[0,2].plot(t,s_template[4],'k',lw=lw)\n", "ax[0,2].set_title(\"Class: 3\",fontsize=20)\n", "ax[0,2].set_yticks([])\n", "ax[0,2].set_xticks([])\n", "\n", "ax[1,0].plot(t,s_template[1],'tab:blue',ls='--',lw=lw)\n", "ax[1,0].set_yticks([])\n", "ax[1,0].set_xticks([])\n", "\n", "ax[1,1].plot(t,s_template[3],'tab:orange',ls='--',lw=lw)\n", "ax[1,1].set_yticks([])\n", "ax[1,1].set_xticks([])\n", "\n", "ax[1,2].plot(t,s_template[5],'k',ls='--',lw=lw)\n", "ax[1,2].set_yticks([])\n", "ax[1,2].set_xticks([])\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define $g(t)$ to generate confounds, i.e., $s_g = g's\\circ g$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def g_function_gaussian_mix(x,centers, widths, scales):\n", " X = np.zeros(len(x))\n", " for center, width, scale in zip(centers, widths, scales):\n", " X = X + scale * np.exp(-(x - center) * (x - center) * width)\n", " X/=X.sum()\n", " return X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate confounds for training set" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6\n", "(100,)\n" ] } ], "source": [ "num_classes = len(s_template)//2\n", "\n", "# generate confounds\n", "L_slope = 10 # number of slope variations\n", "L_shift = 10\n", "s_conf = []\n", "slope_array = np.random.uniform(0.85, 1.15, L_slope) #np.linspace(0.96,1.04,L_slope)\n", "shift_array = np.random.uniform(-0.09,0.09,L_shift) #np.linspace(-0.01,0.01,L_shift)\n", "\n", "x_train = []\n", "y_train = []\n", "t_train = []\n", "tp_train = []\n", "coeff = np.zeros(5)\n", "for k in range(num_classes):\n", " for tmp in range(2):\n", " Nc = 0\n", " tmp_ind = 2*k + tmp\n", " s_conf = []\n", " y_conf = []\n", " t_conf = []\n", " for i_slope in range(L_slope):\n", " for i_shift in range(L_shift):\n", " nn = random.randint(2,10)\n", " centers = np.random.normal(0.5, 0.2, nn)\n", " widths = np.random.uniform(10.0, 50.0, nn)\n", " coeffs = np.random.uniform(0.1, 1.0, nn)\n", " coeffs /= coeffs.sum()\n", "\n", " gm = g_function_gaussian_mix(t,centers, widths, coeffs)\n", "\n", " slope = slope_array[i_slope]\n", " shift = shift_array[i_shift]\n", "\n", " g = np.cumsum(gm)*slope+shift\n", " dt = np.gradient(t)\n", " g_prime = np.gradient(g)/dt\n", " t_conf.append(g)\n", " \n", " if tmp_ind==0:\n", " sc = g_prime*signal_gabor_phi1(g) \n", " elif tmp_ind==1:\n", " sc = g_prime*signal_gabor_phi2(g) \n", " elif tmp_ind==2:\n", " sc = g_prime*signal_sawtooth_phi1(g) \n", " elif tmp_ind==3:\n", " sc = g_prime*signal_sawtooth_phi2(g) \n", " elif tmp_ind==4:\n", " sc = g_prime*signal_square_phi1(g) \n", " elif tmp_ind==5:\n", " sc = g_prime*signal_square_phi2(g) \n", " s_conf.append(sc)\n", " y_conf.append(k)\n", " Nc = Nc+1\n", " x_train.append(np.stack(s_conf, axis=0))\n", " y_train.append(np.stack(y_conf, axis=0))\n", " t_train.append(np.stack(t_conf, axis=0))\n", "print(len(x_train))\n", "print(y_train[0].shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate confounds for testing set" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(300, 300)\n", "(300,)\n" ] } ], "source": [ "# generate confounds\n", "L_slope = 10 # number of slope variations\n", "L_shift = 5\n", "s_conf = []\n", "slope_array = np.random.uniform(0.85, 1.15, L_slope) #np.linspace(0.96,1.04,L_slope)\n", "shift_array = np.random.uniform(-0.09,0.09,L_shift) #np.linspace(-0.01,0.01,L_shift)\n", "\n", "s_conf = []\n", "y_conf = []\n", "t_conf = []\n", "coeff = np.zeros(5)\n", "for k in range(num_classes):\n", " for tmp in range(2):\n", " tmp_ind = 2*k + tmp\n", " for i_slope in range(L_slope):\n", " for i_shift in range(L_shift):\n", " nn = random.randint(2,10)\n", " centers = np.random.normal(0.5, 0.2, nn)\n", " widths = np.random.uniform(10.0, 50.0, nn)\n", " coeffs = np.random.uniform(0.1, 1.0, nn)\n", " coeffs /= coeffs.sum()\n", "\n", " gm = g_function_gaussian_mix(t,centers, widths, coeffs)\n", "\n", " slope = slope_array[i_slope]\n", " shift = shift_array[i_shift]\n", "\n", " g = np.cumsum(gm)*slope+shift\n", " dt = np.gradient(t)\n", " g_prime = np.gradient(g)/dt\n", " t_conf.append(g)\n", " if tmp_ind==0:\n", " sc = g_prime*signal_gabor_phi1(g) \n", " elif tmp_ind==1:\n", " sc = g_prime*signal_gabor_phi2(g) \n", " elif tmp_ind==2:\n", " sc = g_prime*signal_sawtooth_phi1(g) \n", " elif tmp_ind==3:\n", " sc = g_prime*signal_sawtooth_phi2(g) \n", " elif tmp_ind==4:\n", " sc = g_prime*signal_square_phi1(g) \n", " elif tmp_ind==5:\n", " sc = g_prime*signal_square_phi2(g) \n", " s_conf.append(sc)\n", " y_conf.append(k)\n", "x_test = np.stack(s_conf, axis=0)\n", "y_test = np.stack(y_conf, axis=0)\n", "t_test = np.stack(t_conf, axis=0)\n", "\n", "print(x_test.shape)\n", "print(y_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Choose number of training samples per class\n", "In this example we have used 64 randomly chosen samples per class to train the model. The samples were chosen in such a way that the training set contains an equal number of samples generated from each template." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "n_samples_perclass = 64 ## number of training samples per class\n", "n_counts = x_train[0].shape[0] ## number of total samples per template\n", "x_train_sub = []\n", "y_train_sub = []\n", "\n", "for l in range(len(x_train)): ## iterate over set from each template\n", " data = x_train[l]\n", " y_data = y_train[l]\n", " index_array = random.sample(range(n_counts), n_samples_perclass//2)\n", " for i in range(len(index_array)):\n", " x_train_sub.append(data[index_array[i]])\n", " y_train_sub.append(y_data[index_array[i]])\n", "x_train_sub = np.stack(x_train_sub,axis = 0)\n", "y_train_sub = np.stack(y_train_sub,axis = 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create an instance for SCDT_NLS class" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "scdt_nls_obj = SCDT_NLS(num_classes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Training Phase" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "+++++++++++ Training Phase +++++++++++\n", "\n", "Calculating SCDTs for training data ...\n", "\n", "Tune parameters using validation set ...\n", "\n" ] } ], "source": [ "scdt_nls_obj.fit(x_train_sub, y_train_sub, no_local_enrichment=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Testing Phase" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "+++++++++++ Testing Phase +++++++++++\n", "\n", "Calculating SCDTs for testing data ...\n", "\n", "Apply NLS algorithm in SCDT domain\n", "\n", "+++++++++++ Result +++++++++++\n", "\n", "Test accuracy: 100.0%\n" ] } ], "source": [ "from sklearn.metrics import accuracy_score\n", "\n", "preds = scdt_nls_obj.predict(x_test)\n", "\n", "print('+++++++++++ Result +++++++++++')\n", "print('\\nTest accuracy: {}%'.format(100*accuracy_score(y_test, preds)))" ] }, { "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.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }