{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"\"\"\"\nWavelet decomposition using pywavelets\nTo install: pip install pywavelets\n\"\"\"\nimport pywt\nimport random\nimport numpy as np\nimport pandas as pd\nimport scipy.io\nfrom scipy.signal import spectrogram\nfrom scipy.signal import resample\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preictal_tst = '../input/seizure-prediction/Patient_1/Patient_1/Patient_1_preictal_segment_0001.mat'\npreictal_data = scipy.io.loadmat(preictal_tst)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preictal_data","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preictal_array = preictal_data['preictal_segment_1'][0][0][0]\n#EXTRA\nprint(type(preictal_data['preictal_segment_1']) , preictal_data['preictal_segment_1'][0][0][0].shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preictal_array","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# five decomposition coefficients\ncA,cD4,cD3,cD2,cD1 = pywt.wavedec(preictal_array, pywt.Wavelet('db4'), level = 4)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tot_data = [cA, cD4, cD3, cD2, cD1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"list(set(tot_data[1][1]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import math\n\n# renyi\ndef renyi_entropy(d1):\n    \"\"\"\n    d1 shape: (Sample count, Sample length)\n    \"\"\"\n    d1=np.rint(d1)\n    rend1=[]\n    alpha=2    \n    for i in range(d1.shape[0]):\n        X=d1[i]\n        data_set = list(set(X))\n        freq_list = []\n        for entry in data_set:\n            counter = 0.\n            for i in X:\n                if i == entry:\n                    counter += 1\n            freq_list.append(float(counter)/len(X))\n        summation=0\n        for freq in freq_list:\n            summation+=math.pow(freq,alpha)\n        Renyi_En=(1/float(1-alpha))*(math.log(summation,2))\n        rend1.append(Renyi_En)\n    return(rend1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in range(len(tot_data)):\n    renyi_ent[i] = renyi_entropy(tot_data[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# permutation entropy\nfrom pyentrp import entropy\ndef permu(d1):\n    pd1=[]\n    for i in range(d1.shape[0]):\n        X=d1[i]\n        pd1.append(entropy.permutation_entropy(X,3,1))\n    return(pd1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in range(len(tot_data)):\n    perm_ent[i] = permu(tot_data[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from scipy.special import gamma,psi\nfrom scipy.linalg import det\nfrom numpy import pi\nfrom sklearn.neighbors import NearestNeighbors\n\ndef kraskov_entropy(d1):\n    k=4\n    def nearest_distances(X, k):\n        knn = NearestNeighbors(n_neighbors=k)\n        knn.fit(X)\n        d, _ = knn.kneighbors(X)\n        return d[:, -1]\n    def entropy(X, k):\n        r = nearest_distances(X, k)\n        n, d = X.shape\n        volume_unit_ball = (pi**(.5*d)) / gamma(.5*d + 1)\n        return (d*np.mean(np.log(r + np.finfo(X.dtype).eps))+ np.log(volume_unit_ball) + psi(n) - psi(k))\n    kd1=[]\n    for i in range(d1.shape[0]):\n        x=d1[i]\n        x=np.array(x).reshape(-1,1)\n        kd1.append(entropy(x, k))\n    return(kd1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in range(len(tot_data)):\n    krak_ent[i] = kraskov_entropy(tot_data[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":" sample entropy\ndef sampl(d1):\n    sa1=[]\n    for i in range(d1.shape[0]):\n        X=d1[i]\n        std_X = np.std(X)\n        ee=entropy.sample_entropy(X,2,0.2*std_X)\n        sa1.append(ee[0])\n    return(sa1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in range(len(tot_data)):\n    sample_ent[i] = sampl(tot_data[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# shannon entropy\ndef shan(d1):\n    sh1=[]\n    d1=np.rint(d1)\n    for i in range(d1.shape[0]):\n        X=d1[i]\n        sh1.append(entropy.shannon_entropy(X))\n    return(sh1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in range(len(tot_data)):\n    shan_ent[i] = shan(tot_data[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# stack to have shape (sample count, number of features)\nmy_data = np.vstack((np.array(shan_ent), np.array(sample_ent), \n                     np.array(krak_ent), np.array(perm_ent), np.array(renyi_ent)))","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}