├── HAR-CNN-Inception.ipynb ├── HAR-CNN.ipynb ├── HAR-CNN_LSTM.ipynb ├── HAR-LSTM.ipynb ├── README.md ├── explore_data.ipynb ├── img ├── HAR_cnn.png ├── HAR_inception.png └── HAR_lstm.png └── utils └── utilities.py /README.md: -------------------------------------------------------------------------------- 1 | # Human Activity Recognition (HAR) 2 | 3 | In this part of the repo, we discuss the human activity recognition problem using deep learning algorithms 4 | and compare the results with standard machine learning algorithms that use engineered features. 5 | 6 | The data can be downloaded from the [UCI repository](https://archive.ics.uci.edu/ml/datasets/human+activity+recognition+using+smartphones). 7 | 8 | Also see G.Chevalier's [repo](https://github.com/guillaume-chevalier/LSTM-Human-Activity-Recognition) and A. Saeed's [blog](https://aqibsaeed.github.io/2016-11-04-human-activity-recognition-cnn/) where I have got lots of inspiration. 9 | 10 | ## Contents 11 | 12 | The `utils` folder contains the code for reading and processing the data into a tensor form. The generated tensors 13 | have the dimensions 14 | 15 | ``` 16 | (batch, seq_len, n_channels) 17 | ``` 18 | 19 | where `batch` is the number of training examples in each batch, `seq_len` is the number of steps in the time series (128) and 20 | `n_channels` is the number of channels where observations are made (9). 21 | 22 | The aim is to clasify the activities correctly, which are 23 | 24 | ``` 25 | 1 WALKING 26 | 2 WALKING_UPSTAIRS 27 | 3 WALKING_DOWNSTAIRS 28 | 4 SITTING 29 | 5 STANDING 30 | 6 LAYING 31 | ``` 32 | 33 | Below are the architectures used for training 34 | 35 | Notebook | Description 36 | -------- | ------ 37 | [explore_data](https://github.com/bhimmetoglu/seizure-forecast/blob/master/HAR/explore_data.ipynb) | Data exploration 38 | [HAR-LSTM](https://github.com/bhimmetoglu/seizure-forecast/blob/master/HAR/HAR-LSTM.ipynb) | LSTM network 39 | [HAR-CNN](https://github.com/bhimmetoglu/seizure-forecast/blob/master/HAR/HAR-CNN.ipynb) | Convolutional neural network(CNN) 40 | [HAR-CNN-LSTM](https://github.com/bhimmetoglu/seizure-forecast/blob/master/HAR/HAR-CNN-LSTM.ipynb) | CNN + LSTM hybrid 41 | [HAR-CNN-Inception](https://github.com/bhimmetoglu/seizure-forecast/blob/master/HAR/HAR-CNN-Inception.ipynb) | CNN with inception module 42 | 43 | ## Results 44 | 45 | Method | Test accuracy 46 | ------ | ------------- 47 | CNN | 93% 48 | LSTM | 88% 49 | CNN+LSTM | 88% 50 | CNN+Inception | 89% 51 | [Xgboost](https://rpubs.com/burakh/har_xgb) | 96% 52 | 53 | ## CNN architecture 54 | ![title](img/HAR_cnn.png) 55 | 56 | ## LSTM architecture 57 | ![title](img/HAR_lstm.png) 58 | 59 | -------------------------------------------------------------------------------- /explore_data.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "deletable": true, 7 | "editable": true 8 | }, 9 | "source": [ 10 | "# Human Activity Recognition (HAR) explore" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "metadata": { 17 | "collapsed": false, 18 | "deletable": true, 19 | "editable": true 20 | }, 21 | "outputs": [], 22 | "source": [ 23 | "# Imports\n", 24 | "import numpy as np\n", 25 | "import os\n", 26 | "from utils.utilities import *\n", 27 | "from sklearn.model_selection import train_test_split\n", 28 | "import matplotlib.pyplot as plt\n", 29 | "import pandas as pd\n", 30 | "import seaborn as sns\n", 31 | "%matplotlib inline" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 2, 37 | "metadata": { 38 | "collapsed": true, 39 | "deletable": true, 40 | "editable": true 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "X_train, labels_train, list_ch_train = read_data(data_path=\"./data/\", split=\"train\") # train\n", 45 | "X_test, labels_test, list_ch_test = read_data(data_path=\"./data/\", split=\"test\") # test\n", 46 | "\n", 47 | "assert list_ch_train == list_ch_test, \"Mistmatch in channels!\"" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 3, 53 | "metadata": { 54 | "collapsed": false, 55 | "deletable": true, 56 | "editable": true 57 | }, 58 | "outputs": [ 59 | { 60 | "name": "stdout", 61 | "output_type": "stream", 62 | "text": [ 63 | "Training data shape: N = 7352, steps = 128, channels = 9\n", 64 | "Test data shape: N = 2947, steps = 128, channels = 9\n" 65 | ] 66 | } 67 | ], 68 | "source": [ 69 | "print (\"Training data shape: N = {:d}, steps = {:d}, channels = {:d}\".format(X_train.shape[0],\n", 70 | " X_train.shape[1],\n", 71 | " X_train.shape[2]))\n", 72 | "print (\"Test data shape: N = {:d}, steps = {:d}, channels = {:d}\".format(X_test.shape[0],\n", 73 | " X_test.shape[1],\n", 74 | " X_test.shape[2]))" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": 4, 80 | "metadata": { 81 | "collapsed": true, 82 | "deletable": true, 83 | "editable": true 84 | }, 85 | "outputs": [], 86 | "source": [ 87 | "# Mean value for each channel at each step\n", 88 | "all_data = np.concatenate((X_train,X_test), axis = 0)\n", 89 | "means_ = np.zeros((all_data.shape[1],all_data.shape[2]))\n", 90 | "stds_ = np.zeros((all_data.shape[1],all_data.shape[2]))\n", 91 | "\n", 92 | "for ch in range(X_train.shape[2]):\n", 93 | " means_[:,ch] = np.mean(all_data[:,:,ch], axis=0)\n", 94 | " stds_[:,ch] = np.std(all_data[:,:,ch], axis=0)\n", 95 | " \n", 96 | "df_mean = pd.DataFrame(data = means_)\n", 97 | "df_std = pd.DataFrame(data = stds_)" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": 5, 103 | "metadata": { 104 | "collapsed": false, 105 | "deletable": true, 106 | "editable": true 107 | }, 108 | "outputs": [ 109 | { 110 | "data": { 111 | "image/png": "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\neYuIJOj/A+ClBY0V0L4GAAAAAElFTkSuQmCC\n", 112 | "text/plain": [ 113 | "" 114 | ] 115 | }, 116 | "metadata": {}, 117 | "output_type": "display_data" 118 | } 119 | ], 120 | "source": [ 121 | "df_std.hist()\n", 122 | "plt.show()" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 6, 128 | "metadata": { 129 | "collapsed": false, 130 | "deletable": true, 131 | "editable": true 132 | }, 133 | "outputs": [ 134 | { 135 | "data": { 136 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAEFCAYAAAAsU2YoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHgVJREFUeJzt3X20HVWZ5/HvJSGJaW6YIFdExMly0EdsbUIHJSAvVwUa\nRMeAy9ZBYCkv0kBouk0LGQzjaqWngU5iExWRl4giLLt5yRIcELqBAA1j22KiMsIDRlndPUqbgYBJ\nQCThzh+7bnK4Oa91d52qXef3WStrnVO559RTe1c9Z9euvauGxsbGEBGRtOxUdgAiItI7JW8RkQQp\neYuIJEjJW0QkQUreIiIJUvIWEUnQ1LIDqCozOxb4a2A68GPgVHf/TblRSWxmNgR8DXjE3ZeWHY/E\nZWYnAp8GxoDngT919x+UG1Ucank3YWYjhAP6Q+5uwM+Bi8uNSmIzs32Bu4E/LjsWic/MDPgb4Gh3\nnwtcBNxSblTxKHk3dxTwL+7+RPb+K8DHslaa1MfZhB/pvy87ECnEi8Bp7v6r7P0PgNea2bQSY4pG\n3SbN7Q38W8P7fwdmAcOAuk5qwt0XApjZe8uOReJz9yeBJ2Fb99hy4FZ3/12JYUWj5N1cqzOSrX2N\nQkQmzcx+D7iW0Cg7utxo4lG3SXP/CuzZ8H4vYIO7by4pHhHJwczeADxEaHi9292fLTmkaJS8m7sL\nmG9mb8re/wnw7RLjEZEemdluwH3ALe7+UXd/oeyYYlK3SRPu/msz+wRwU3ZxYx1wcslhiUhvzgTe\nABxnZsc1LH+vuz9dUkzRDOmWsCIi6VG3iYhIgpS8RUQSpOQtIpIgJW8RkQT1ZbTJ+vUbu74qOnv2\nTDZseL7IcAZivSMjw32dyt9LHU9GWfUUS8z4q1jHVaqfKsUC+eJpV8eVa3lPnTpF65WWUi+v1OPv\npErbV6VYIH48lUveIiLSmSbpdHDKxfe0/f+Vi9/Tp0ikGdVP/amOm1PLW0QkQUreIiIJUvIWEUmQ\nkreISIKUvEVEEqTkLSKSIA0VnKROw5hgcIcyiUhx1PIWEUmQkreISILUbSIipemm21GaU8tbRCRB\nankPODPbGVgJzAGmAxcBPwWuBcaAR4Cz3f3lkkIUkSaUvOVE4Gl3P8nMdgPWZv+WuPtqM7sC+CCw\nqt+B6ZRapDV1m8iNwIXZ6yFgCzAPuC9bdgdwRAlxiUgbankPOHffBGBmw8BNwBJgqbuPPzVlI7Br\np++ZPXtm5W5+DzAyMlx2CDuoYkySHiVvwcz2JnSLXO7uN5jZpQ3/PQw82+k7qvS4qUbr128sO4RX\nGBkZjhaTfgQGm7pNBpyZ7QHcBZzv7iuzxWvMbDR7fQzwQBmxiUhrannLBcBs4EIzG+/7PhdYYWbT\ngEcJ3SkiUiFK3gPO3c8lJOuJDu93LCLSPXWbiIgkSC1vkZrTRKx6apu8VemSOt2yF6jwRCzJr1O3\nyXilHwocDXwJWE6o9EMJkzo+WGyIIjJJmohVQ526TW5k+0iDVpV+FPrFFqmsfk/E6vf483brq9pY\n+JjxtE3eZc2+K6vAi1pvp++t2g4m9dOviVgxJyF1q9X6yoilnTzxtMsNHS9Y9nv2XVkFXuR6231v\nUevVD0I8qfebN0zEWujud2eL15jZqLuvJkzEures+CSfThcsVeki6dNErBrq1PJWpYskThOx6qlT\nn7cqXUSkgjRJpw869ZlWub9UuqM6ln5T8haRwuhpSMVR8paBpwQjKdKNqUREEqSWtwBgZgcCl7j7\nqJntg+5fI1JptU7eOh3ujpmdB5wEbM4Wjd+/RjctEqmoWidv6do64Hjguux9z/evqeoDiKuiccar\nZr/GlfoM2LyUvAV3v9nM5jQsGur1/jVVfQBxVYzfAkEPIJZYdMFSmmns3+7q/jUi0l9qeUszun9N\nZIN6al8nVZuIpeQtzSwCrtL9a0SqS8lbAHD3J4H52evH0f1rpAON5iqX+rxFRBKklreURi03qYoU\n90W1vEVEEqTkLSKSICVvEZEEKXmLiCRIFywrQBM4RKRXSt5SmBSv4Es91XFfVLeJiEiCKtvyruMv\npUg7Vbt3hlSbWt4iIglS8hYRSVBlu03klXRKLZK+mMdxruRtZjsBlwP7AS8Cp7n7z/J8l1ST6rj+\nVMdpy9vyXgDMcPeDzGw+sIzwkNqu6YJk5U26jqXyVMcJy9vnfQjwXQB3/x5wQLSIpCpUx/WnOk5Y\n3pb3LOC5hvdbzWyqu29p9scjI8NDE5fdtkw/8BWnOq6/SdWx6rd3Mcssb8v7N4QH0277nlYVLslS\nHdef6jhheZP3g8D7ALK+sp9Ei0iqQnVcf6rjhOXtNlkFHGlmDwFDwCfihSQVoTquP9VxwobGxsbK\njkFERHqkSTotmNlC4ExgDFgHnO7uvy43KimCmS0AvuHus8qOReIys2XAh4FnskXu7h8pMaRolLyb\nMLN5wF8A+7n7c2a2FPg8cEa5kUlsZvYmYCm6VURdHQx81N0fKjuQ2LTDNuHuDwNvyhL3DGAv4OmS\nw5LIzGwm8E3gU2XHIvGZ2XRgf+AvzOxHZnazmb2h7LhiKbzPu5spuNlB9A/Aqe7+mJntDHwdmANs\nJXRZPGZm+wPfAZ7IPvoVd/+7iOudDnwNeCNhGNUqQot7C/DvwAvAI8DZ7v5yges9292f6GV7UzWJ\n/WMlYf+YDlzk7rea2T7AtYSurrb1lH3vdcC9wD3AI+6+S8nxV66+c25f08/0Wj+TjSX7my8TxrLP\nAV4D/BZ4GzCXSZZ1nrJpWH4gcIm7j2bvey6bfrS8t03BBRYTpuBuY2YHAPcD/6Vh8fuAqe5+MPA5\n4K+y5fOA5e4+mv1rV9h51ns6sMnd5wPnAAvcfXfgKeB1wOGEq/LtRtrHWO+XcmxvqvKU14nA0+5+\nKHA028trObAkW962nszsLGCLu6+sUPxVrO8829fqM13XT4xY3P0XwNXAi9lnPga8mZDIY5R1nrLB\nzM7L4prRsLjnsulH8u40BXc6cBzwWMOyx4Gp2S/bLOClbPk84Fgzu9/MrjGzYVrLs963Andkv4Ij\nwL7Z8hFgD2A2cAdwRBHrzT7jDevtZXtTlae8bgQuzF4PEc6MIJTXfdnrTvX0ceAdZrYWuB14lZmt\nNbPXlRx/1eo7z/a1+kwv9TPpWMzsDwgNo+9m///PwBRCPolR1nnKBsIAiOMnLOu5bPqRvJtOwR1/\n4+4Puvu/TfjMJsKv42PAVcCKbPn3gU+7+2HAz4HPRl7vWuD9wJ7ALcBeZjYFmEk4rX4a2AjsWsR6\nzWwomywxvt5etjdVPZeXu29y943ZAXcTsCT7ryF3H+8HbFtP7v5Od3+bu88lnOm94O5z3f2XJcZf\nxfrOsz+3+kzX9RMplpeB97C9hXsmIXE/RZyyzlM2uPvNbG+Qjuu5bPqRvPNMwf1z4E53fzOhP+nr\n2YXDVdnFRAj90ftHXu/K7HN/Dawh9GM9TKj8BdnfDAPPFrTeBwi/1A+7+1Z6295U5ZqibWZ7E/qr\nr3P3G7LFjX2EneoplpjxV7G+82xfq89Mtn56isXdHwHuBj5nZo8Sjq1nss/EKOuYtxfouWz6kbzz\nTMHdwPZftGeAnQmnO3ea2Tuz5e8lJNaY630HcLe7HwJ8Brg1a5n9I/Cfs785hpBki1rvjYSWAPS2\nvanqubzMbA/gLuD8CX3Wa8xsNHvdqZ62cfcn81yszMSMv4r1nWd/bvWZXPUzyViuAe5x930JXVVr\ns+Uxyjrm7QV6Lpt+jPPeYQqumZ0A7OLuV7b4zBeAlWb2ADANuMDdN5vZmcAXzWz81OeTkdf7BPB5\nM/sM4Zfv1Gz5IuAqM5sGPEo41e3HenvZ3lTlKa8LCNcfLjSz8b7jY+itnmKJGX8V6zvP9rWadj/Z\n+okZS4yyzhNPKz2XTduhgs2GNAE/ZRLDfUREZPI6dZs0G9I02eE+IiIySZ2Sd7MhTZMd7iMiIpPU\nts/b3TcBTBjStLTXIS1btmwdmzp1yiRDlR7t8GSbIq1fv7HrqbqzZ89kw4bniwwnl9Tiavb0oiL1\nUscxVbVeJqPbbWpXxx0vWGZDmlYBl7v7DWZ2acN/dzWkpeyCHxkZZv36jaXGULSJ2zgyUoX5Hc1V\n9YdccVVTHbc/xja17TZpMaRpssN9RERkkjq1vJsNaToXWNHn4VhNnXLxPW3/f+Xi9/QpknTVfURR\np30EtJ8Mgjrmik593ucSkvVEhxcTjpRgfETRSWa2G2ESw1rCiKLVZnYFYUTRqjKDFJFX0sMY5Ea2\nnz21GlF0FB2S9+zZM3vqx6tSn3w3rfNObltW7IjZKpWXVENlk3eMA6qOp0qxxRpR1MtF6TpeQC5y\ne1qVlxL6YNOTdKTZTZLKuMGTiPRAyXvAaUSRSJoq220ifVPpEUUi0pyS94DTiCKRNKnbREQkQWp5\ni9Rc3Sdi9UvVRq+p5S1Sf7q1cw2p5S1Sf6VMxIqp3Zj2Dyz6dqHfX9R3THadSt4VoPtvSJHKmIgV\nUz8mdcX4/l6+o9ttapfg1W0iMgA0Eat+1PIWqbmGiVgL3f3ubPEaMxt199WEiVj3lhVfFcS4HUe/\nKXmL1J8mYtWQkrdIBFUbRtZIE7HqSX3eIiIJGuiWt0Z5iFRfjKGAdaSWt4hIgpS8RUQSpOQtIpIg\nJW8RkQQpeYuIJKir0SZmdiBwibuPmtk+6FaSUhEpzowTiaFjy9vMzgOuBmZki3QrSRGRknXTbbIO\nOL7h/cRbSR4ROygREWmvY7eJu99sZnMaFg31eivJZvcBTmXgfafT8tuW9efEo5t7/07m/sDqGiuW\nJoRJbHlmWPZ8K8my7gPcD0XfZ7jb9Uy8P3AviTzrGjsJ2JwtGu8aW21mVxC6xtreqF9E+ivPaJM1\nZjaavT4GeCBeOFISdY2JJCZPy3sRcJVuJRnU4XS4qK6xdkZGhjt2nfWrS6oq2p0txXhMl9RLV8nb\n3Z8E5mevH0e3kqy7QrvGun0EVL+6pKqi1fa2Ki8l9ME20HcVlJb0lJUa0kXpelHy7oMYE0n6POpF\nXWM1o4vS9aPkLYC6xgbA+EXp67L3Ey9KH0WH5N3rdY1B02s31mS7vZS8pbIGbep7kY9Si3FRus5D\nfmPo5RpNt9d92iV43ZhKZDD1fFFaqkUtb5HBpIvSkfV72LCSt8hg0kXpxCl5iwwIXZSuF/V5i4gk\nSC1vESnNoI0oikktbxGRBCl5i4gkSMlbRCRBSt4iIgnSBUsRyaUO97JPmVreIiIJUvIWEUmQuk2k\nMBrDK1IcJW8RkT6JedtfdZuIiCRIyVtEJEHqNhGRwui6R3HU8hYRSVCulreZ7QRcDuwHvAic5u4/\nixmYlEt1XH+q47TlbXkvAGa4+0HAYmBZvJCkIlTH9ac6TtjQ2NhY57+awMyWA993929l7/+vu+8V\nOzgpj+q4/lTHacvb8p4FPNfwfquZ6eJnvaiO6091nLC8yfs3wHDj97j7lgjxSHWojutPdZywvMn7\nQeB9AGY2H/hJtIikKlTH9ac6TljeU6RVwJFm9hAwBHwiXkhSEarj+lMdJyzXBctBYGZvB74I7Aps\nBc5w94fLjUpiMbOTgU81LNoVeD3wenf/j3KiktjM7DjgL4GXgQ2E4ZDryo0qDk3SacLMZgJ3AZe6\n+/7A54Hry41KYnL3b7j7XHefC7wDeApYqMRdH2b2KuCbwPFZPd8KrCg3qnh0Zbm5o4B17n579v5W\n4BclxiPFOh/4tbt/texAJKophO6gXbP3uwC/LS+cuJLvNul2lpiZXQk84+6LO33GzM4D3kkYRrUf\n8Cxwnrv/sOjtaSbnNu4MrATmANOBi9z91rJjNbMPESaEjAHXu/tl2fL/DvxXYBpwubtf04+YzGx3\n4ElgXfZ/17v7ZWb2ceDj2VfMAOYCr3X3Z/sRV/b/O5RVVq9fJ9TrVuB0d38sVkz91MX2/zfgz4At\nhIupZ7n7y2b2Q8JIGYBfuHvLvvqse+wq4GlCMn9XkbNIJ7FNPe//deg26ThLzMzOAN7ew2d2JlyF\nv9LdDyD0fd9uZtMLiL8bebbxROBpdz8UOBr4Uj8CpU2sZjYFuBg4AjgIOMvMdjezUeBg4F3A4cDe\n/YoJOIPQH3pYY0zufq27j7r7KPAw8KcxE3enuFqVFWG/nOruBwOfA/4qckz91G77XwVcBLzb3d9F\naD2/38xmAEPjddMhcb8d+B/AW939dYSyutnMhorbpFzbNEqO/b8OyfsQ4LsA7v494IDG/zSzg4ED\nga92+xngl8Bj7v7P2d98m/Cr/cYC4u9Gnm28Ebgwez1E+KXvh5axuvtWYF93fw54NaFMfwf8EaEV\nsgq4DfhOv2IC/hhY0CQmAMzsAOD33f3KyDG1jatNWT0OTM1aeLOAlwqIq1/a1cuLwMHu/nz2fiqh\ny2M/YKaZ3WVm92RDHFv5I+DBhguUXwbeRijPouTZplz7fx2Sd8tZYma2J/BZYGG3n8ncAcwxs3nZ\n9xxGOHUtq9+75210903uvtHMhoGbgCVlx5rFtcXMjgd+BKwGNgO7E3byDwN/AlwfuXXUNCYzmw3s\nAzzQJKZxFxBGKxQhT1ltInSZPEboDkj5AlzL7Xf3l8cvHpvZOYT+6n8AngeWEhLe+L7S6trdD4HD\nzWyP7P0CQjfL/4u+Jdvl2aZc+38dkne7WWIfJhTM7YRTmBOyvsy2M8vc/SlCRV9uZo8AXyBcsS7r\nYkeebcTM9gbuBa5z9xsqECsA7n4LsBehf+9kQn/kne7+O3d3QmtkpA8x7QP8yt1fahITZvafAHP3\neyPG0k1c2zSJ688JZfVmQiv061lXQorabr+Z7WRmS4EjgQ+5+xjhzOOb7j7m7o8T9p09m325u98D\n/A2w2sx+RGjgfLCYTdkmzzbl2v/rMNrkQeADwN9PnCXm7ivIWiZZQnuLu1+bXQhq+pmGz95P6Iqo\ngjzbuAdhuONCd7+7CrGa2SzCaeFR7v6imW0m9Df/E3BudqOkPYHfI+zQhcbk7v9iZn9oZvc1iQlC\nP3iRZZenrDawvavkGcL1mSkFxlikltuf+Sqhq2GBu4/XySmEaztnmdnrCC3dX7Vagbt/mdBd0i95\ntinX/l+n0SZ/wPZZYn8I7NLYT9mQ2BY3+0yVr9jn3MbLgI8QTq/HHePuL5QZq5l9EjiVkIB+DJzj\n7lvN7FLg3YSzwQvc/c4KxPRp4CV3/9tYsUw2LuBVhFFEexJa45f18awqqnbbD/wg+/cAocsS4DLg\nfwHXAm/Ilp/v7g/1NfA28myTu6/Ks/8nn7xFRAZRHfq8RUQGjpK3iEiC+nLBcv36jaX2zcyePZMN\nG57v/IcVlSf+kZHhIici7KCsOq5i3fYrpn7X8ZYtW8eqVtYTVXF/aNRrfO3qeCBa3lOnpnoxPkg9\n/iJVsWyqGFMMKWxX1WOMGd9AJG8Rkbqpwzjv3E65+J6Of7Ny8Xv6EIlUmfaTcnUq/0Ete7W8RUQS\nNNAt7xjUKhORMqjlLSKSICVvEZEEqdukg266RUR0UU36TS1vEZEEKXmLiCRIyVtEJEHq8x5wzZ4y\nD/yUcM/kMeAR4OyGG8eLSAWo5S3NnjK/HFiSLRui+EdHiUiP2ra81SobCDcSHlAM258yPw+4L1t2\nB3AU4cnWkiAdx/XUqdtkvFV2kpntBqzN/i1x99VmdgWhVaYDO1HuvglgwlPml2YPRgXYCOza6Xtm\nz55Z2h3dRkaGO/9RyUqOUcdxDXVK3mqVDYDsKfOrgMvd/YbseXrjhoFnO31HWfdQHhkZZv36jaWs\nuxdFxNjDD4KO4xpqm7zr0CobV2bLJ8a6i4q/xVPm15jZqLuvBo4B7i1k5RVR94lYsY5jKP0MoqmJ\nMVUxxkax4us42iTlVtm4sltnk113nvh72EEuAGYDF5rZhdmyc4EVZjYNeJTtrTZJVIzjGIo5g5is\nxpjKPtY76TW+dsdxpwuWA98qqzt3P5eQrCc6vN+xSDF0HNdTp5a3WmUi6dNxXEOd+rzVKhNJXJWP\n47pfbyiSZliK9IEe2iGxKXmLyMBL8cdV0+NFRBKklreI1F4d+9bV8hYRSZCSt4hIgtRt0gd6vqFI\ncerYJdINJW+ptUE9sKX+1G0iIpIgJW8RkQQpeYuIJEjJW0QkQUreIiIJ0mgTAcDMDgQucfdRM9sH\nPZxWpNK6St6pHtipDBMr+6Y4ZnYecBKwOVu0HD2ctnZSPY6luY7dJtmBfTUwI1s0fmAfSniY6QeL\nC0/6ZB1wfMP7iQ+nPaLvEUlUOo7rp5uW9/iBfV32Xk+drhl3v9nM5jQsGkrpIdNVf+BstwreDh3H\nNdMxead+YNdFnxNU4+lzpR8yXfUHzvaiwIdMRzmOe11n3XTq3rxtWXcnL317enwTyRzYdVLkgd2E\nHk5bfz0fx1DNp8dXRTdlE/Pp8XmGCq4xs9Hs9THAAzm+Q6ptEfCXZva/gWno4bR1pOM4cXla3ouA\nq/TU6Xpx9yeB+dnrx6nAw2m78YFF3y47hFTpOE5cV8m7qgd2KkMBRaqgqsdxXXSTj7rtF++GZliK\niCRIMyylMJN9CIXOrNKnOnylTt18vUzGU8tbRCRBSt4iIglS8hYRSZCSt4hIgip7wVIXOkREWlPL\nW0QkQZVteUv96ezqlSY7tLLfVH/lUstbRCRBSt4iIglS8hYRSZD6vBORWn+oiBRLLW8RkQTlanmb\n2U7A5cB+wIvAae7+s5iBSblUx/WnOk5b3m6TBcAMdz/IzOYDy+jx6dMaZlR5k65jqTzVccLydpsc\nAnwXwN2/BxwQLSKpCtVx/amOE5a35T0LeK7h/VYzm+ruW5r98cjI8NDEZTGfKCGFUB3XX091DAw1\nPhBX9VuuvC3v3xCeOL3te9pUuKRJdVx/quOE5U3eDwLvA8j6yn4SLSKpCtVx/amOE5a322QVcKSZ\nPQQMAZ+IF5JUhOq4/lTHCRsaGxsrOwYREemRJumIiCRIyVtEJEFK3iIiCUryxlTdTus1syuBZ9x9\nccOyA4FL3H00e78PcC0wBjwCnO3uLycU//7Ad4Ansj/5irv/XZHxF6lT2ZjZh4DFhPq63t0vM7Pp\nwNeANxKGv53t7k+Y2WuAq4DZwBTgZHdfV2I8c4ErgC3A49l3FbqvtZNn2xr+7zXAw8CR7v5Ytm1f\nBLZm33Wyu/9HVeJrWH4CcI67HzSZ2IqIsdf9NdWW97ZpvYSCWTbxD8zsDODtE5adB1wNzGhYvBxY\n4u6HEq6492PmQcz45wHL3X00+5ds4s60LBszmwJcDBwBHAScZWa7A6cDm9x9PnAO8KXsI5cSDpjD\ngCXAW0qO57PA59z9EGA6cGyOeGLKs22Y2c7AV4EXGr7rMkJSHAVuAc6vWHzjDZ1TCcd5LDFj7Gl/\nTTV5t53Wa2YHAwcSCqfROuD4CcvmAfdlr+8gFHTRYsd/rJndb2bXmNkwaWtZNu6+FdjX3Z8DXk1o\nnfwOeCuh7nB3B/bNPvIu4PVm9o/Ax4DVJcezBtjNzIYIk2NeyhFPTHm2DWAp4Qzilw3f9VF3X5u9\nngr8tkrxmdmrgf8J/FmEuAqJkR7311STd9NpvQBmtiehhbNw4ofc/WZ2PGCG3H18vORGYNf44e4g\nZvzfBz6d/Vr/PPtsylqWDYC7bzGz44EfEXbuzcBa4P1mNpRNNtkra/XMATa4+xHAv5KvNRgznieA\nFcCjwB7k+zGJqedtM7OPA+vd/c7GL3L3X8G2hsdC4AtViS8r+2uATxGO8ZiilSE97q+pJu9203o/\nDOwO3E44jTkhK6xWGvsch4FnI8bZSsz4V7n7w+Ovgf0jx9pvHadsu/stwF7ANOBkYGX2uQeA44CH\ns1bP08Ct2cduI9+Nl2LGcxlwqLu/BfgGTbrL+izPtp1CmNizGpgLfMPMXgtgZh8htCaPdff1VYmP\n0KJ9E/AV4FvAW83sbyPEFy3GrAx72l9TTd4tp/W6+wp3n5f1vV0M3ODu17b5rjVmNpq9PoZwwBUt\nZvx3mtk7s9fvJVwASVnLsjGzWWZ2n5lNzy70bSb8+L4DuDvrS76RcAYC8E/j3wUcBvyfkuN5hnCw\nQzhdnp0jnph63jZ3P8zdD8/2z7WEi2pPmdmJhBb3qLv/fIc1lRvf/e7++9myjwI/dfdY3SfRypAe\n99ckR5vQZFpvdhV5F3e/ssfvWgRcZWbTCKezN8UNtamY8Z8JfNHMXgKeAj4ZN9S+a1s2ZnY9cH+2\nvT8GvklIgp83s88QzpxOzb5rEXC1mZ1JOLU9oeR4TgO+ZWZbCH2fp+eIJ6Y827aDrFtiBeFU/xYz\nA7jP3SfbhRclvoLFjLGn/VXT40VEEpRqt4mIyEBT8hYRSZCSt4hIgpS8RUQSpOQtIpIgJW8RkQQp\neYuIJOj/A+ClBY0V0L4GAAAAAElFTkSuQmCC\n", 137 | "text/plain": [ 138 | "" 139 | ] 140 | }, 141 | "metadata": {}, 142 | "output_type": "display_data" 143 | } 144 | ], 145 | "source": [ 146 | "df_std.hist()\n", 147 | "plt.show()" 148 | ] 149 | }, 150 | { 151 | "cell_type": "markdown", 152 | "metadata": { 153 | "deletable": true, 154 | "editable": true 155 | }, 156 | "source": [ 157 | "Some channels have mean values near 1, most close to 0. Let's standardize them all" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": 7, 163 | "metadata": { 164 | "collapsed": true, 165 | "deletable": true, 166 | "editable": true 167 | }, 168 | "outputs": [], 169 | "source": [ 170 | "X_train, X_test = standardize(X_train, X_test)" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 8, 176 | "metadata": { 177 | "collapsed": true, 178 | "deletable": true, 179 | "editable": true 180 | }, 181 | "outputs": [], 182 | "source": [ 183 | "# Check Mean value for each channel at each step\n", 184 | "all_data = np.concatenate((X_train,X_test), axis = 0)\n", 185 | "means_ = np.zeros((all_data.shape[1],all_data.shape[2]))\n", 186 | "stds_ = np.zeros((all_data.shape[1],all_data.shape[2]))\n", 187 | "\n", 188 | "for ch in range(X_train.shape[2]):\n", 189 | " means_[:,ch] = np.mean(all_data[:,:,ch], axis=0)\n", 190 | " stds_[:,ch] = np.std(all_data[:,:,ch], axis=0)\n", 191 | " \n", 192 | "df_mean = pd.DataFrame(data = means_)\n", 193 | "df_std = pd.DataFrame(data = stds_)" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": 10, 199 | "metadata": { 200 | "collapsed": false 201 | }, 202 | "outputs": [ 203 | { 204 | "data": { 205 | "image/png": "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\n", 206 | "text/plain": [ 207 | "" 208 | ] 209 | }, 210 | "metadata": {}, 211 | "output_type": "display_data" 212 | } 213 | ], 214 | "source": [ 215 | "df_mean.hist()\n", 216 | "plt.show()" 217 | ] 218 | } 219 | ], 220 | "metadata": { 221 | "kernelspec": { 222 | "display_name": "Python 3", 223 | "language": "python", 224 | "name": "python3" 225 | }, 226 | "language_info": { 227 | "codemirror_mode": { 228 | "name": "ipython", 229 | "version": 3 230 | }, 231 | "file_extension": ".py", 232 | "mimetype": "text/x-python", 233 | "name": "python", 234 | "nbconvert_exporter": "python", 235 | "pygments_lexer": "ipython3", 236 | "version": "3.6.0" 237 | } 238 | }, 239 | "nbformat": 4, 240 | "nbformat_minor": 2 241 | } 242 | -------------------------------------------------------------------------------- /img/HAR_cnn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/healthDataScience/deep-learning-HAR/7b3151facde1b667d570542a03e6dd12a9de1ef9/img/HAR_cnn.png -------------------------------------------------------------------------------- /img/HAR_inception.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/healthDataScience/deep-learning-HAR/7b3151facde1b667d570542a03e6dd12a9de1ef9/img/HAR_inception.png -------------------------------------------------------------------------------- /img/HAR_lstm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/healthDataScience/deep-learning-HAR/7b3151facde1b667d570542a03e6dd12a9de1ef9/img/HAR_lstm.png -------------------------------------------------------------------------------- /utils/utilities.py: -------------------------------------------------------------------------------- 1 | # HAR classification 2 | # Author: Burak Himmetoglu 3 | # 8/15/2017 4 | 5 | import pandas as pd 6 | import numpy as np 7 | import os 8 | 9 | def read_data(data_path, split = "train"): 10 | """ Read data """ 11 | 12 | # Fixed params 13 | n_class = 6 14 | n_steps = 128 15 | 16 | # Paths 17 | path_ = os.path.join(data_path, split) 18 | path_signals = os.path.join(path_, "Inertial_Signals") 19 | 20 | # Read labels and one-hot encode 21 | label_path = os.path.join(path_, "y_" + split + ".txt") 22 | labels = pd.read_csv(label_path, header = None) 23 | 24 | # Read time-series data 25 | channel_files = os.listdir(path_signals) 26 | channel_files.sort() 27 | n_channels = len(channel_files) 28 | posix = len(split) + 5 29 | 30 | # Initiate array 31 | list_of_channels = [] 32 | X = np.zeros((len(labels), n_steps, n_channels)) 33 | i_ch = 0 34 | for fil_ch in channel_files: 35 | channel_name = fil_ch[:-posix] 36 | dat_ = pd.read_csv(os.path.join(path_signals,fil_ch), delim_whitespace = True, header = None) 37 | X[:,:,i_ch] = dat_.as_matrix() 38 | 39 | # Record names 40 | list_of_channels.append(channel_name) 41 | 42 | # iterate 43 | i_ch += 1 44 | 45 | # Return 46 | return X, labels[0].values, list_of_channels 47 | 48 | def standardize(train, test): 49 | """ Standardize data """ 50 | 51 | # Standardize train and test 52 | X_train = (train - np.mean(train, axis=0)[None,:,:]) / np.std(train, axis=0)[None,:,:] 53 | X_test = (test - np.mean(test, axis=0)[None,:,:]) / np.std(test, axis=0)[None,:,:] 54 | 55 | return X_train, X_test 56 | 57 | def one_hot(labels, n_class = 6): 58 | """ One-hot encoding """ 59 | expansion = np.eye(n_class) 60 | y = expansion[:, labels-1].T 61 | assert y.shape[1] == n_class, "Wrong number of labels!" 62 | 63 | return y 64 | 65 | def get_batches(X, y, batch_size = 100): 66 | """ Return a generator for batches """ 67 | n_batches = len(X) // batch_size 68 | X, y = X[:n_batches*batch_size], y[:n_batches*batch_size] 69 | 70 | # Loop over batches and yield 71 | for b in range(0, len(X), batch_size): 72 | yield X[b:b+batch_size], y[b:b+batch_size] 73 | 74 | 75 | 76 | 77 | 78 | --------------------------------------------------------------------------------